Jquery索引不适用于子节点

时间:2013-04-22 07:30:45

标签: jquery indexing

我想索引文档中的所有内容,然后通过索引调用它。 HTML:

<ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
</ul>

警告获取索引:

alert('Index: ' + $('#foo').index());

问题在于它0ul的警告号码#foo。我理解这个的逻辑,但我需要它们,所以ul应该计为0#foo应该是1

我可以尝试获得此类索引吗?我尝试prevAll(),但结果相同。

PS请不要这只是一个例子,实际上代码应该适用于大型文档。

Example code

2 个答案:

答案 0 :(得分:1)

你可以这样做:

$.fn.tree_index = function() {
    var index = -1;

    $(this).parents().each(function() {
        index += $(this).index() + 1;
    });

    return index;
}

alert('Index: ' + $('#foo').tree_index());

答案 1 :(得分:1)

没有参数的

index()将查找其父级内元素的索引。 但你可以用一个参数来称呼它超越它。

假设我们正在处理您的示例

<ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
</ul>

解决方案可能如下所示:

$('ul, li').index($('ul'))   // => 0
$('ul, li').index($('#foo')) // => 1
$('ul, li').index($('#bar')) // => 2

您甚至可以以编程方式执行此操作:

$('ul, li').each(function(i) {
  console.log(this.tagName + (!!this.id ? " #" + this.id : "") + " = " + i)
})

// UL     => 0
// LI#foo => 1
// LI#bar => 2

请注意,$(selector).index(element)将返回element匹配的节点中selector的索引。

希望有所帮助。