3

.each()を使用してvarを取得し、それを使用してクリアし、.each()の次のループで最初からやり直すにはどうすればよいですか?

'title'属性を持つさまざまな数の画像があります。title属性を取得し、各画像の後に新しいdivに追加して、キャプションを作成したいと思います。ただし、2つの画像があるページで次のコードを使用すると、各画像の下に両方のタイトルが表示されます。

.each()を実行して、最初の画像で機能し、varを消去してから、2番目の画像で機能するようにするにはどうすればよいですか?

jQuery(".node-type-article .imagefield-imagelink img").each( function() {
    var caption = jQuery(this).attr('title');
    jQuery(this).after('<div class="caption"></div>');
    jQuery('.caption').append(caption);
    caption = '';
});
4

4 に答える 4

4

これが問題の行です。両方のdivに一致しています:

jQuery('.caption').append(caption);

これを行う:

jQuery(".node-type-article .imagefield-imagelink img").each(function() {
    var caption = jQuery(this).attr('title');
    jQuery(this).after('<div class="caption">' + caption + '</div>');
});

また、キャプション変数をクリアする必要はありません。関数の呼び出しごとにローカルです。

于 2011-07-29T13:24:16.963 に答える
0

あなたの犯人は次のとおりです。jQuery('.caption').append(caption);

これにより、キャプションのクラスを持つすべてのオブジェクトが検索され、キャプション テキストが追加されます。

おそらくあなたが見ているのは、1 つのタイトルの 1 つのキャプションと、2 つのタイトルのキャプションです。

修正は、nextステートメントを追加することです。そのため、代わりに次のようにします。

jQuery('.caption').append(caption);

あなたがやる:

$(this).next('.caption').html(caption);
// $ and jQuery are the same thing btw

編集

追加するのを忘れて申し訳ありません。キャプション変数をクリアする必要はありません。

関数内で変数を定義したためeach、毎回新しい変数が作成されます。

于 2011-07-29T13:23:20.060 に答える
0

反復ごとに新しいスコープが開始されます。反復後に自動的に範囲外になるためerase 、必要はありません。var caption

于 2011-07-29T13:17:14.870 に答える
0

あなたの問題はここにあります:

caption = '';

これはうまくいきます:

jQuery(".node-type-article .imagefield-imagelink img").each( function() {
    var caption = jQuery(this).attr('title');
    jQuery(this).after('<div class="caption"></div>');
    jQuery('.caption').append(caption);
    this.title = ''; //or the jQuery way --> $(this).attr('title','');
});
于 2011-07-29T13:18:16.353 に答える