2012-10-02 2 views
1

Я хочу получить индекс щелкнутого элемента с помощью jquery - это должно быть легко с .index(), но я не хочу, чтобы индекс в узко определенном селектор, такой как $('div').index().Как получить индекс (DOM/document) элемента с щелчком в JQuery

Что я хочу, это уникальный индекс этого элемента на странице/в 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) Я не знаю, как получить уникальный номер индекса для этих DIVS (или любой другой элемент в этом отношении), как $(this) относится только к текущему выбору, так внедренный DIVs повторно индексируется в ноль, после нажатия.

2) Мне нужно, чтобы это работало для ANY/Все HTML-теги (не только дивы)

Спасибо за любую помощь вы могли бы дать!

ответ

4

Использование

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

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

Demo вhttp://jsfiddle.net/6n5zp/1/

+0

Beautiful - спасибо Габи! – Steve

4

Это работает, хотя это, вероятно, не очень эффективно:

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

Спасибо за это, однако, проблема с этим решением, мне нужно это работать с любыми именами тегов, а не только дивы – Steve

+0

@Steve попробовать обновленную версию. – Alnitak

+0

Спасибо за ваш ответ Alnitak – Steve

1

Используя решение Альнитака, это будет работать для любого элемента ,

function getElementIndex(DOMELEMENT) 
{ 
    var elements = document.getElementsByTagName(DOMELEMENT.tagName); 
    return index = [].indexOf.call(elements , DOMELEMENT); 
} 
Смежные вопросы