3

如何使用 .each() 获取 var,使用它,清除它,然后从 .each() 的下一个循环重新开始?

我有不同数量的带有“标题”属性的图像。我想获取标题属性并将其附加到每个图像之后的新 div 中,创建标题。但是,在带有 2 张图片的页面上使用以下代码,我在每张图片下都得到了它们的标题。

如何运行 .each() 以便它在第一个图像上工作,删除它的 var,然后在第二个图像上工作?

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>');
});

此外,您不需要清除标题 var。它对于函数的每次调用都是本地的。

于 2011-07-29T13:24:16.963 回答
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 回答
0

你的罪魁祸首是:jQuery('.caption').append(caption);

这将找到所有具有标题类的对象并将标题文本附加到它。

您可能看到的是一个标题和一个标题,然后是一个标题和 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 回答