jQuery:not()选择器没有选择其正对应的倒数

时间:2014-01-08 15:21:51

标签: jquery jquery-selectors

我想知道我是否可能错过了一些东西,我想出来的工作比我喜欢的更脆弱。也就是说,我宁愿不必选择一些与我所追求的不相关的元素,在这种情况下,是一个子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/

1 个答案:

答案 0 :(得分:1)

尝试

$('fieldset input:radio[value=False]:not(fieldset[disabled] input)')

演示:Fiddle