相邻兄弟选择器的不一致性在1.5.1和1.7.2之间

时间:2012-05-28 10:12:07

标签: jquery jquery-selectors

HTML:

<div>
    <div class="t-dropzone">
        <input id="files" >
    </div>
    <ul></ul>
</div>

jQuery

$('#files').parents('.t-dropzone:first + ul')

如果是jquery-1.5.1.min.js,则会返回ul元素,但jquery-1.7.2.min.js会返回null

哪个库包含错误?

2 个答案:

答案 0 :(得分:2)

该语句应该返回一个空的jQuery对象。您正在寻找与#files匹配的.t-dropzone:first + ul祖先,因此祖先必须是ul元素,其中没有。

稍微详细一点,该选择器会找到紧跟在第一个ul元素后面的.t-dropzone元素。第一个.t-dropzone元素是#files的祖先,紧接着是ul,但ul不是#files的父级,所以不应该退回。

因此,回答你的问题,jQuery 1.5.1(及以下)包含错误,并在jQuery 1.7.1中修复(据我所知,通过更改jsfiddle.net上的jQuery版本)

答案 1 :(得分:0)

这不会那样。您需要先选择div,然后选择ul兄弟:

$('#files').closest('.t-dropzone').next('ul')

有关原因的详细解释,请参阅James' answer