使用jQuery获取所选元素的层次结构位置/数字?

时间:2012-06-05 19:05:16

标签: jquery dom hierarchy

请耐心等待。我正在尽力解释我需要什么,但我可能需要对我的OP进行一些更新。

我想获得层次结构中所选元素的位置。例如, 如果我在整个html文档中总共有4个超链接,并且我将鼠标悬停在第三个链接上,我想要“html> body> a:eq(2)” - 2表示第3个超链接元素。

不,index()没有做到这一点。

我尝试this code进行了一些调整,得到了这个:“html> body> a”,但找不到返回位置的函数。

如何在相似元素的层次结构中获取所选元素的位置? (我甚至不知道这是否是正确的术语。)如果x == y有点事,我是否需要遍历DOM并执行手动匹配

<a href=#">link1</a> 
<a href=#">link2</a> 
<a href=#">link3</a> 
<a href=#">link4</a>

我会将此代码用于各种HTML元素,而不仅仅是超链接。

3 个答案:

答案 0 :(得分:1)

如果你有一个给定的元素,并想知道它在文档中的第n个链接,你可以这样做:

function whichLink(el) {
    return $("a").index(el);
}

这种形式的.index(el)返回jQuery对象中的哪个项与传入的元素匹配。它搜索jQuery对象以查找匹配元素。由于jQuery对象按文档顺序对元素进行排序,因此这将为您提供给定链接的文档中的位置。

如果您尝试做一些不同的事情,请进一步澄清您的问题。

答案 1 :(得分:0)

通常,您可以在每个循环中执行此操作:

$('a').each(function(i) {
  // i has the index so we can do something with it
  var index = i;
  $(this).click(function() {
     $(this).attr('href', index);  // make the href = i for instance
  });
});

答案 2 :(得分:0)

由于你想在悬停时采取行动,我建议采用略有不同的方法。事件我将在文档首次加载时设置索引,而不是找到所有元素来获取每个悬停的索引(可能经常发生),因此您可以在事件触发时轻松检索它。

类似的东西:

$('a').each(function(i, el){            
    $(this).data('index', i); 
    $(this).hover(function(){
        var hoveredIndex = $(this).data('index');
        // Do you action with the index
    });
});

如果您没有太多标记或悬停不经常发生,这可能是矫枉过正。此外,如果元素周围有容器,则可以修改选择器/事件。