使用 jQuery .each() 在多个图像下方附加标题属性。

发布于 2024-11-27 00:06:14 字数 497 浏览 1 评论 0原文

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

我有不同数量的带有“标题”属性的图像。我想获取 title 属性并将其附加到每个图像后面的新 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 = '';
});

How can I use .each() to get a var, use it, clear it and then start fresh with the next loop of .each()?

I've got a varying number of images with 'title' attribute. I want to take the title attribute and append it to a new div after each image, creating a caption. Using the following code on a page with 2 images, however, I get both of their titles under each image.

How can I run .each() so that it does it's work on the first image, erases it's var, then does it's work on the second image?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

2024-12-04 00:06:14

这是有问题的线。它匹配两个 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。它对于函数的每次调用都是本地的。

This is the offending line. It's matching both divs:

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

Do this:

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

Also, you don't need to clear the caption var. It's local to each invocation of the function.

染墨丶若流云 2024-12-04 00:06:14

每次迭代都会开始一个新的范围。您不需要擦除 var title,因为它会在迭代后自动超出范围。

Every iteration will start a fresh scope. You don't need to erase the var caption as it'll automatically go out of scope after the iteration.

骷髅 2024-12-04 00:06:14

您的问题在这里:

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

Your problem is here:

caption = '';

This will work:

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','');
});
悲歌长辞 2024-12-04 00:06:14

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

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

您可能看到的是一个带有一个标题的标题,然后一个带有 2 的标题。

解决方法是添加 next 语句,因此

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

您可以:

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

编辑

抱歉忘记了要添加,您不需要清除标题变量。

因为您已在 each 函数中定义了变量,所以每次都会创建一个新变量。

Your culprit is: jQuery('.caption').append(caption);

this will find all objects with the class of caption and append the caption text to it.

What you area probably seeing is one caption with one title and then one with 2.

The fix is to add a next statement, so instead of:

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

you do:

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

EDIT

Sorry forgot to add, you dont need to clear you caption variable.

Because you have defined your variable within the each function, it will create a new variable each time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文