3

すべて、私はこれを理解するために最善を尽くしましたが、私が見つけた可能性のある例ははるかに複雑であり、この問題を抱えているのは私だけのようです。ヘルプ、または単に説明。

以下のコードでは、タブ 1、タブ 2、タブ 3 の 3 つのアラートが連続して表示されることを期待しますが、代わりにタブ 1 の 3 つのアラートが表示されます。これはなぜですか?また、望ましい効果を得るための解決策は何でしょうか?

お時間とご協力いただきありがとうございます。

HTML

<div id="tab-1">
    <span class="test"></span>
</div>
<div id="tab-2">
    <span class="test"></span>
</div>
<div id="tab-3">
    <span class="test"></span>
</div>

jQuery

$('.test').each(function() {
    alert($('.test').parent().attr("id"));
});

4

3 に答える 3

3

あなたはそれぞれの構文に少しずれています。

$(".test").each(function(index, element) {
    alert($(element).parent().attr("id"));
});

これは、各テストクラスを再度クエリして最初のクラスを使用する代わりに、現在の反復を使用します。

于 2012-09-25T16:42:16.657 に答える
3

ループで$('.test')アイテムを使用する代わりにクエリを実行しているため、これに変更します.each()

$('.test').each(function() {
    alert($(this).parent().attr("id"));
});

ここを参照してください:http://jsfiddle.net/gLh5z/

関数の代わりにfunction(idx, elem)and を使用して、最初の 2 つのパラメーターとしてインデックスと要素を渡すこともできます。$(elem)$(this)

于 2012-09-25T16:42:18.243 に答える
3

あなたのコードは近いですが、それは完全には正しくありません。以下を使用する必要があります。

$('.test').each(function() {
    alert($(this).parent().attr("id"));
});

JS Fiddle デモを更新しました

あなたが経験している問題は、 の各反復で配列を再選択していることでeach()あり、jQuery は返された配列の最初の要素の属性を返すだけです。

参考文献:

于 2012-09-25T16:42:31.397 に答える