2010-10-27 161 views
2

我有这样的HTML标记jQuery的:元素之间移动属性

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

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

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

和我需要每个图像的标题并把它放在自己的“一”。我试着用这个功能

$(function() { 

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

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

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

但唯一的结果来做到这一点是相同的标题为所有“A”(他找到的第一个冠军)

任何帮助????

非常感谢您

回答

0

试试这个:

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

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

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

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

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

这和我的实际上是一样的,倒退。我认为我的表现会更好,因为选择器更简单('a' vs'a> img')。你怎么看? – lonesomeday 2010-10-27 12:34:47

+0

@lonesomeday - 问题是'firstChild'在符合W3C标准的浏览器中会失败,因为第一个孩子将是一个空文本节点,而在IE中,空格不会被编入文本节点。我还建议检查''将是必要的,以避免篡改没有儿童图像的''元素。 – user113716 2010-10-27 12:38:53

+0

公平点。 +1 – lonesomeday 2010-10-27 12:39:51

0
这里

修改功能。您可以通过每个锚标记必须循环和更新其属性相应

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

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

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

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

使用attr回调签名:

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

编辑,以可靠地工作请注意,这是比帕特里克DW版的效率较低。