1

jqueryを使用してクリックされた要素のインデックスを取得したい-これは簡単なはず.index()ですが、のような狭く定義されたセレクター内にインデックスを入れたくありません$('div').index()

私が欲しいのは、ページ上/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)、現在の選択のみを参照しているため、埋め込まれたDIVは、クリックするとゼロで再インデックスされます。

2)これがANY / ALL htmlタグ(DIVだけでなく)で機能するために必要です

あなたが与えることができるどんな助けにも感謝します!

4

3 に答える 3

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/のデモ

于 2012-10-02T13:26:25.823 に答える
4

これは機能しますが、おそらくあまり効率的ではありません。

$(document).on('click', '*', function (e) {
   e.stopPropagation();
   var others = document.getElementsByTagName(this.tagName);
   var index = [].indexOf.call(others, this);
});
于 2012-10-02T13:20:42.780 に答える
1

Alnitak ソリューションを使用すると、これはどの要素でも機能します。

function getElementIndex(DOMELEMENT)
{
   var elements = document.getElementsByTagName(DOMELEMENT.tagName);
   return index = [].indexOf.call(elements , DOMELEMENT);
}
于 2012-10-02T13:26:58.310 に答える