好的,如果我错了,请纠正我,但我认为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()
绝对有效!
答案 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" />
问题是我不想用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中失败。请务必使用所有小写字母作为属性名称。