JQuery:将属性值附加到每个元素

7
我正在尝试将一个附加的url块添加到现有属性中并简单地更新它。
$("img").each(function (i) {
    var originalSrc = $("img").attr('src');
    $("img").attr('src', 'http://www.domain-name.com/' + originalSrc);    
});

$("a").each(function (i) {
    var originalHref = $("a").attr('href');
    $("a").attr('href', 'http://www.domain-name.com/' + originalHref);    
});

它正在计算所有元素并将一个长字符串附加到最终属性中。我理解发生了什么,但不确定正确的操作方式。这显然是错误的。

本质上,我正在清理远程页面,并且需要将所有相对连接重置为绝对连接。


我不确定我理解了,这个有什么问题? - Bryan McLemore
今天早上我没有喝足够的咖啡,这就是原因!:-) 谢谢大家。这样一个愚蠢的错误。 - ritsuke
5个回答

28

尝试:

$("img").each(function () {
    var originalSrc = $(this).attr('src');
    $(this).attr('src', 'http://www.domain-name.com/' + originalSrc);    
});

8

使用更简单的方式实现相同功能(与http://api.jquery.com/attr/进行比较):

$("img").attr('src', function(i, val){
   return 'http://www.domain.com/' + val;
});

$("a").attr('href', function(i, val){
   return 'http://www.domain.com/' + val;
});

问候


1

由于您正在使用each方法循环遍历元素,因此应在回调函数内使用this关键字来引用当前迭代的元素:

$("img").each(function (i) {
    var image = $(this), // 'this' is the image element being iterated
        originalSrc = image.attr('src');

    image.attr('src', 'http://www.domain-name.com/' + originalSrc);    
});

0

使用您的代码结构:

$("img").each(function (i) {
    var $img = $(this);
    var originalSrc = $img.attr('src');   // use "this" in the $() function to get the current element...
    $img.attr('src', 'http://www.domain-name.com/' + originalSrc);    
});

$("a").each(function (i) {
    var $a = $(this);
    var originalHref = $a.attr('href');
    $a.attr('href', 'http://www.domain-name.com/' + originalHref);    
});

请确保在jQuery的回调函数中使用$(this)来检索节点列表中的“当前”节点。


0
在每个函数内部使用$(this)而不是$(a)$(img)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接