2012-10-02 51 views
1

我想要使用jquery获取单击元素的索引 - 这应该很容易使用.index()但我不希望索引在狭义定义中选择器如$('div').index()如何获取JQuery中单击元素的(DOM/document)索引

我想要的是页面/ DOM中该元素的唯一索引 - 如果存在$(everything).index()

这里是我的简单的jQuery单击功能:

$("div").click(function (e) { 
    e.stopPropagation(); 
    index = $(this).index(); 
}); 
我已经用一些示例HTML使用

<div>DIV 0 - I want to show as index=0 (which I do)</div> 
<div>DIV 1 - I want to show as index=1 (which I do)</div> 

<span>SPAN 0 - I want to show as (span) index=0</span> 

<div>DIV 2 - I want to show as index=2 (but I don't, I show as 3) 
    <div>DIV 3 - I want to show as index=3 (but I don't, I show as 0)</div> 
    <span>SPAN 1 - I want to show as (span) index=1</span> 
    <span>SPAN 2 - I want to show as (span) index=2</span> 
</div> 

我已经JSfiddled关于与它一起玩。

我的问题是这些:

1)我不知道如何获得这些div(一个唯一的索引号或与此有关的任何其他元素)作为$(this)只是指当前的选择,所以嵌入式点击后,DIV重新索引为零。

2)我需要这对任何工作/所有的HTML标签(不只是资料核实)

感谢所有帮助你可以给!

回答

4

使用

$(document).on('click','*',function (e) { 
    e.stopPropagation(); 
    var tag = this.tagName; 
    var index = $(tag).index(this); // it now works 

    $('#output').html(index); 
}); 

演示在http://jsfiddle.net/6n5zp/1/

+0

美丽 - 谢谢Gaby! – Steve

4

这工作,虽然它可能不是非常有效:

$(document).on('click', '*', function (e) { 
    e.stopPropagation(); 
    var others = document.getElementsByTagName(this.tagName); 
    var index = [].indexOf.call(others, this); 
}); 
+0

感谢这一点,但是,这种解决方案的问题是我需要它与任何及所有标签名称的工作,而不仅仅是div的 – Steve

+0

@Steve尝试更新的版本。 – Alnitak

+0

感谢您的回答Alnitak – Steve

1

使用参宿一的解决方案,这会为任何元素工作。

function getElementIndex(DOMELEMENT) 
{ 
    var elements = document.getElementsByTagName(DOMELEMENT.tagName); 
    return index = [].indexOf.call(elements , DOMELEMENT); 
} 
相关问题