IE中jQuery attr()的替代方案?

时间:2011-08-13 17:39:59

标签: javascript jquery internet-explorer attr

好的,如果我错了,请纠正我,但我认为jQuery attr()在IE中不起作用。 (marked wontfix)既然如此,最好的替代方案是什么?例如,这适用于IE,

jQuery(document).ready(function($) {
    $('.airsrc').each(function() {
        var $this = $(this);
        var src = $this.attr('data-websrc');
        $this.attr('src', src);
    });
});

更新:哎呀......我意识到了这个问题。实际上我在基于CSS3媒体查询的if语句中有这个。 IE8或更低版本本身不支持的媒体查询。 attr()绝对有效!

5 个答案:

答案 0 :(得分:7)

我一直在IE上使用attr data-*属性,我从来没有遇到过问题。 Here's a live version,刚刚在IE6,IE7和IE9中测试过。没有我的IE8盒子,但是我再也没有问题。

答案 1 :(得分:5)

我在使用IE浏览器attr()时遇到问题。列出的错误描述是:

  

当属性为事件时,JQuery函数.attr在IE下不起作用   比如.attr(" onchange"," alert(' Hello event onchange!')"); 。它是   因为IE不明白这一点。如果属性是,您可以检查   事件,如果是IE,则使eval功能。

具体来说,它与事件有关。常规属性不应成为问题。

答案 2 :(得分:4)

请试试这个:

$this.data('websrc');代替$this.attr('data-websrc');

答案 3 :(得分:1)

我有类似的问题。我有一些表格,我想轻松设置是否需要该字段。我的表单输入看起来像这样:

< input id="myid" name="myname" type="text" required="true" />

除了IE9之外,它在所有方面都很棒!卫生署!

问题是我不想用jQuery设置新属性,我不想扩展输入元素的原型....我只想要一个适用于所有浏览器的解决方案,而不需要很多额外的代码或分支。

我尝试了jQuery的prop()方法,但同样必须手动设置。我想要一些能够将所有DOM元素加载并以这种方式提取数据的东西。

我发现jQuery attr()方法适用于除IE9之外的所有浏览器。在对它进行了一段时间的探讨之后,我意识到该属性存在,但在IE9上读取它的处理方式略有不同。

所以,我最终以这种方式回忆起这些价值观:

var val = $('#elementID').attr('required') || $('#elementID')[0].getAttribute('required');

它并不完美,但效果很好,并没有要求我返回并使用“data-”重命名我的属性,或者在DOM加载后分配它们。

如果jQuery 1.6.x将这个更改添加到我们的attr()和prop()方法,那不是很好吗?

如果有人知道一个更优雅的解决方案,不需要在页面加载后设置属性,那么请告诉我。

答案 4 :(得分:0)

如果您使用混合大小写的属性名称,似乎attr()将在IE中失败。请务必使用所有小写字母作为属性名称。