Javascript 每个,attr,还是这个?

Javascript 每个,attr,还是这个?,javascript,jquery,html,this,attr,Javascript,Jquery,Html,This,Attr,我不确定是否需要这里的each()函数,或者是否可以通过this实现这一点。我试图根据if语句切换src属性。它可以工作,只是它将它们都切换到hifi1.jpg。如何使其将每个img的数据websrc值应用于自身 HTML: 更新:解决方案: jQuery(document).ready(function($) { if ( Modernizr.mq('(min-width:480px)') ) { $('.airsrc').each(function() {

我不确定是否需要这里的
each()
函数,或者是否可以通过
this
实现这一点。我试图根据
if
语句切换src属性。它可以工作,只是它将它们都切换到
hifi1.jpg
。如何使其将每个
img
数据websrc
值应用于自身

HTML:

更新:解决方案:

jQuery(document).ready(function($) {
    if ( Modernizr.mq('(min-width:480px)') ) { 
    $('.airsrc').each(function() {
        var $this = $(this);
        var src = $this.data('websrc');
        if ( src != '' ) { 
            $this.attr('src', src);
        }
    });
    }
});
这适用于支持自定义数据属性的浏览器,从我的测试中我发现这意味着FF/Chrome/Opera/Safari。也许是IE9。我认为getAttribute可以用于(较旧的)IE

它同时应用于这两个对象,因为您将它应用于整个jQuery对象
airsrc

您必须使用
$(this)

或者

按照上面的代码进行操作,将
$(this)
分配给
$this
,以缓存它,避免进一步查找。然后获取其数据并更改其属性

它同时应用于这两个对象,因为您将它应用于整个jQuery对象
airsrc

您必须使用
$(this)

或者


按照上面的代码进行操作,将
$(this)
分配给
$this
,以缓存它,避免进一步查找。然后获取其数据并更改其属性。

airrc.attr('src',src)应该是
$(this).attr('src',src)一切都会很美好

airsrc.attr('src',src)应该是
$(this).attr('src',src)一切都会很精彩

您需要在每个迭代中使用
这个
,以获得该迭代的特定项,当然是用jQuery包装的。通过一些小的优化

jQuery(document).ready(function($) {
    if (Modernizer.mq('(min-width:480px)')) {
        $('.airsrc').each(function() {
           var $this = $(this),
                 src = $(this).data('websrc'); 
           $this.attr('src', src);
       });
    }
});

请注意,如果检查每个
之外的条件,则只需执行一次。另外,您可以通过将它赋给变量然后重用它来避免重新构造此
的jQuery。

您将希望在每个函数中使用此
,以获得该迭代的特定项,当然是包装在jQuery中。通过一些小的优化

jQuery(document).ready(function($) {
    if (Modernizer.mq('(min-width:480px)')) {
        $('.airsrc').each(function() {
           var $this = $(this),
                 src = $(this).data('websrc'); 
           $this.attr('src', src);
       });
    }
});

请注意,如果检查每个
之外的条件,则只需执行一次。另外,您可以通过将jQuery分配给一个变量,然后重新使用它,从而避免重新构造该jQuery。

您可以使用attr方法的一个功能使代码更短:

jQuery(function($) {
    if ( Modernizr.mq('(min-width:480px)') ) { 
        $('.airsrc').attr('src', function() {
            return $(this).data('websrc');
        });
    }
});

通过使用attr方法的一个功能,您可以使代码更短:

jQuery(function($) {
    if ( Modernizr.mq('(min-width:480px)') ) { 
        $('.airsrc').attr('src', function() {
            return $(this).data('websrc');
        });
    }
});

为什么你认为
$(this.data('websrc')
将返回图像的
数据websrc
属性的值(该属性无论如何都是无效的,但这是另一回事)
每个
attr
这两个
都是完全正交的。代码出现错误的原因是因为您调用的是
airrc.attr()
,而不是
$(this.attr())
在each()循环中,它设置集合中所有元素的属性,而不是特定元素。@Delan:在HTML5和jQuery中有效。@Tomalak没有IE知识是件好事!;)(HTML5的很多东西都在IE9中工作,但不是更早)你为什么认为
$(this.data('webrc')
将返回图像的
数据websrc
属性的值(该属性无论如何都是无效的,但这是另一回事)
每个
attr
这两个
都是完全正交的。代码出现错误的原因是因为您调用的是
airrc.attr()
,而不是
$(this.attr())
在each()循环中,它设置集合中所有元素的属性,而不是特定元素。@Delan:在HTML5和jQuery中有效。@Tomalak没有IE知识是件好事!;)(HTML5的很多东西都在IE9中工作,但不是更早。)我自己做了一些小的优化。值得注意的是,让事情顺利进行……)@托马莱克-啊,我看到我删掉了
,因为我删掉了这些行。谢谢修理@托马拉克谢谢你!是的,越快越好!这个想法是基于手机、平板电脑或网络可能有两个或三个if语句。我想我还需要添加一个检查来确保数据websrc不为null。(上面添加的版本)我自己做了一些小的优化。值得注意的是,让事情顺利进行……)@托马莱克-啊,我看到我删掉了
,因为我删掉了这些行。谢谢修理@托马拉克谢谢你!是的,越快越好!这个想法是基于手机、平板电脑或网络可能有两个或三个if语句。我想我还需要添加一个检查来确保数据websrc不为null。(以上增加的版本)
jQuery(function($) {
    if ( Modernizr.mq('(min-width:480px)') ) { 
        $('.airsrc').attr('src', function() {
            return $(this).data('websrc');
        });
    }
});