jQuery:在元素之间移动属性

时间:2010-10-27 12:29:36

标签: jquery

我有这个HTML标记

<a href="#" title="">
   <img src="#" title="image1" />
</a>

<a href="#" title="">
   <img src="#" title="image2" />
</a>

<a href="#" title="">
   <img src="#" title="image3" />
</a>

我需要拍摄每张图片的标题并将其放在“a”上。我尝试用这个功能

   $(function() {

    var title = $('a').find('img');

    var updateTitle = title.attr('title');

    $('a').attr({
      title: updateTitle,
      alt: 'lol'
     });
 });

但唯一的结果是所有“a”(他找到的第一个标题)的标题相同

任何帮助????

非常感谢

4 个答案:

答案 0 :(得分:1)

$(function() {
    $('a > img').each(function() {
        this.parentNode.title = this.title;
        this.parentNode.alt = 'lol';
    });
});

$(function() {
    $('a:has(img)').attr('title', function() {
        return $(this).children('img').attr('title');
    }).attr('alt', 'lol');
});

答案 1 :(得分:0)

试试这个:

$('a').each(function() {
    var title = $(this).find('img');

    var updateTitle = title.attr('title');

    $(this).attr({
      title: updateTitle,
      alt: 'lol'
     });
};

attr()方法仅作用于包装集的第一个元素。这同样适用于其他jQuery方法。对于这样的情况,使用每种实用方法非常方便。

答案 2 :(得分:0)

这是修改过的功能。您必须遍历每个锚标记并相应地更新其属性

$('a').each(function(){

    var title = $(this).find('img');

    var updateTitle = title.attr('title');

    $(this).attr({
      title: updateTitle,
      alt: 'lol'
     });
});

答案 3 :(得分:0)

使用attr的回调签名:

$(function(){
    $('a').attr('title', function() {
        return $(this).find('img').attr('title');
    });
});

编辑可靠地工作请注意,这比patrick dw的版本效率低。