0

私は決して jQuery (または JavaScript) の専門家ではないので、誤解や見落としがある場合はご容赦ください。私は次のHTMLを持っています:

<html>
    <body>
        <div class="ted">Ted</div>
        <div class="ted">Ted</div>
        <div class="tim">Tim</div>
        <div class="ted">Ted</div>
        <div class="tim">Tim</div>
    </body>
</html>

そして、次の JS:

$('.ted').click(function() {
    alert($(this).index());
});

クラスで div をクリックすると'.ted'、アラートにそのインデックスが表示されdivます。

最初の div アラートをクリックすると '0' (予想)、2 番目の div アラートをクリックすると '1' (予想) が表示されます。ただし、最後 (リストの 4 番目) をクリックすると、'.ted' divアラート '3' が表示されます。なぜインデックスが 2 にならないのでしょうか? (JS配列は0ベースであるため)これは3番目 '.ted' divですか?

$('.ted')リスト内のすべての div を実際に戻すようなものですか?

例: http://jsfiddle.net/nha2f/6/

4

4 に答える 4

3

メソッドの.index()ドキュメントは、この動作を明確にします。関連する部分は次のとおりです(強調を追加):

メソッドに引数が渡されない場合、戻り値は、兄弟要素に対する.index()jQuery オブジェクト内の最初の要素の位置を示す整数です。

セレクターに一致する 3 番目の要素は、実際にはその親の 4 番目の子であるため、インデックスは 3 です。

ドキュメントを読み続けて、問題の解決策を見つけてください。

セレクター文字列が引数として渡された場合、元の要素の、セレクターによって一致した.index()要素に対する相対位置を示す整数を返します。

したがって、同じセレクターを渡す.index()と、一致したセットに関連する要素のインデックスが返されます。

alert($(this).index(".ted"));
于 2012-12-07T09:46:41.237 に答える
0

.index()クリックされた要素の、その兄弟に対する相対的な親のインデックスを返します。div同じイベント リスナー/クラス/ID を持つ他の とは比較されません。あなたの 3 番目'.ted' divは、あなたの の 4 番目の子ですbody

于 2012-12-07T09:47:59.870 に答える
0

必要な動作を取得するには、呼び出しにセレクターを追加しますindex: Fiddle

$('.ted').click(function() {
    alert($(this).index(".ted"));
});

セレクターを に渡すと、そのセットindex内の要素を探すように jQuery に指示します。そうでない場合は、すべての兄弟要素との相対的な位置を確認しようとします。

または、ted 要素のリストを覚えてから、物事を反転します: Fiddle

var teds = $(".ted");
teds.click(function() {
    alert(teds.index(this));
});

に要素を渡すindexと、セット内のその要素を探すように jQuery に指示します。

于 2012-12-07T09:48:14.867 に答える
0

インデックスは親内の子です。.ted要素を列挙したい場合は、これを試してください:

$('.ted').each( function( i, a ){
    $(a).click( function(){
       alert( i ); // <- should be 0, 1 or 2.
    } );
} );
于 2012-12-07T09:50:57.623 に答える