0

我想使用延迟加载,它需要一个名为“data-original”的属性,该属性指向原始图像 src 值。我可以像这样使用来自 src attr 的值创建新的“原始数据”,而不会出现问题:

  $('img.lazy').each(function() {
    a =  $(this).attr("src");
        $(this).attr("data-original", a);
   }); 

但是,如果我遵循这个(延迟加载需要 src 值):

  $('img.lazy').each(function() {
    b =  "img/grey.gif";
        $(this).attr("src", b);
   }); 

data-original 和 src atrr 都变成“img/grey.gif”

来自新手的感谢!

4

2 回答 2

1

您可以将两者放在同一个循环中。即使认为这在这里可能不是问题,如果您不使用名为 a 的全局变量,您通常应该使用“var a = ...”。

$('img.lazy').each(function() {
   $(this).attr("data-original", $(this).attr("src"));
   $(this).attr("src", "img/grey.gif");
}); 
于 2012-09-03T17:10:43.930 回答
1

出于安全原因,某些(或可能全部?)浏览器不允许使用 jQuery.attr()方法更改 DOM 元素的某些属性。如果是这种情况,您可以使用以下方法。

$('img.lazy').each(function() {
    $(this).attr("data-original",$(this).attr("src"));
    $(this)[0].src = "img/grey.gif";
    // or $(this).get(0).src = "img/grey.gif";
});

[编辑]

换了顺序:

$('img.lazy').each(function() {
    var src = $(this).attr("src");
    // assign the initial src value to temp var
    $(this)[0].src = "img/grey.gif";
    // or $(this).get(0).src = "img/grey.gif";
    $(this).attr("data-original",src);
});

我不熟悉延迟加载。它有可能会替换元素而不是更改它们的属性值。如果是这种情况,那么您将需要采取不同的路径。

[结束编辑]

不过,我不确定这是否是您的问题。

于 2012-09-03T17:23:58.560 回答