我想知道我是否错过了什么,我想出的工作比我喜欢的更脆弱。 即我宁愿不必选择一些与我所追求的内容无关的元素,在这种情况下,是子div 或特定的不相关的层次结构。
<form>
<fieldset>
<div>
<input type="radio" value="True" name="outer" id="outer-yes"/> <label for="outer-yes">Yes</label>
<input type="radio" value="False" name="outer" id="outer-no"/> <label for="outer-no">No</label>
</div>
<fieldset disabled>
<div>
<input type="radio" value="True" name="inner" id="inner-yes"/> <label for="inner-yes">Yes</label>
<input type="radio" value="False" name="inner" id="inner-no"/> <label for="inner-no">No</label>
</div>
</fieldset>
</fieldset>
<input type="submit"/>
</form>
<div id="results"></div>
$(function(){
var tests = [
{ filter: 'input:radio[value=False]', expected: 2 },
{ filter: 'input:radio[value=False]:disabled', expected: 1 }, // because I suspected this would not work as expected, i.e. wouldn't detect the parent fieldset disabled attribute
{ filter: 'fieldset:not([disabled]) input:radio[value=False]', expected: 1 }, // I hoped this would work, but apparently we're looking at the top most fieldset, and not the closest fieldset
{ filter: 'fieldset[disabled] input:radio[value=False]', expected: 1 }, // It kind of surprises me that this passes
{ filter: 'fieldset[disabled]>div>input:radio[value=False]', expected: 1 }, // If I do a strict child selection, I get the results I expect, however, this frailer than I'd like.
{ filter: 'fieldset[disabled] div input:radio[value=False]', expected: 1 }
];
var results = [];
$.each(tests, function(){
this.actual = $(this.filter).length;
results.push(this.filter + ': expected: ' + this.expected + ', actual: ' + this.actual + ', pass: ' + (this.expected === this.actual) + '<br/>');
});
$('#results').html(results.join(''));
});
这是随附的小提琴: http://jsfiddle.net/5Fd2a/6/
尝试
$('fieldset input:radio[value=False]:not(fieldset[disabled] input)')
演示:小提琴