jQuery :not() 选择器没有选择其正等价物的倒数



我想知道我是否错过了什么,我想出的工作比我喜欢的更脆弱。 即我宁愿不必选择一些与我所追求的内容无关的元素,在这种情况下,是子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)')

演示:小提琴

最新更新