javascript – 为什么这个jQuery返回3的索引?

前端之家收集整理的这篇文章主要介绍了javascript – 为什么这个jQuery返回3的索引?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
HTML
<ul>
    <li class="selected">First Item</li>
    <li class="disabled">Second Item</li>
    <li class="separator">Third Item</li>
    <li>Fourth Item</li>
</ul>

jQuery的:

alert($("li:not(.disabled,.separator)").index());

根据the documentation索引:

the return value is an integer indicating the position of the first
element within the jQuery object relative to its sibling elements.

强调第一要素.但上面的代码返回3.根据文档不应该这个代码返回0?

你可以在这里看到它:http://jsfiddle.net/Zf9Vv/

注意:

我的选择器匹配两个元素:第一个和最后一个LI.

解决方法

编辑(见评论)
原来的答案是错误的…我现在要保留在这里,所以意见是有道理的.

看看jQuery的索引来源,你可以看到following snippet

if ( !elem ) {
    return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
}

与之前版本1.6.2中的相应(如果非常不同)的代码片段进行比较.注意使用这个[0]:

return jQuery.inArray( this[0],// If it receives a string,the selector is used
// If it receives nothing,the siblings are used
elem ? jQuery( elem ) : this.parent().children() );

看来,在当前版本中,这个.prevAll部分会导致问题.如果将其更改为this.eq(0).prevAll(它会复制索引文档所述),那么您将返回正确的值.所以会出现这是一个jQuery错误.

在1.6.2版本中,使用inArray.该方法返回第二个参数中第一个参数的索引(如果第二个参数中没有找到第一个参数,则返回-1).第一个参数是[0](匹配集合中的第一个元素),我们得到预期的结果.

这是一个包含修改后的jQuery源的updated fiddle.正确的结果是提醒.

原来的答案(这是不正确的):

再次仔细阅读文档的引用部分(加粗加亮):

the return value is an integer indicating the position of the first
element within the jQuery object relative to its sibling elements.

只是因为两个兄弟姐妹已经从匹配的集合中删除,它不会更改索引返回的值.换句话说,匹配的元素(< li>第四项< / li>)将始终具有相对于其兄弟姐妹的索引3(除非当然,新问题的元素之前插入新的兄弟姐妹).

原文链接:https://www.f2er.com/jquery/151498.html

猜你在找的jQuery相关文章