【问题标题】:Alternative for jQuery attr() in IE?在 IE 中替代 jQuery attr()?
【发布时间】:2011-10-26 12:02:16
【问题描述】:

好的,如果我错了,请纠正我,但我认为 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() 绝对有效!

【问题讨论】:

  • 我认为 attr('src') 有效...但使用您自己的属性却不行。
  • 该错误报告专门提到了“事件”属性,例如“onchange”。据我所知,attr('xx') 在 IE 中应该可以正常工作。
  • 你是对的。我的意思是自定义数据属性。
  • @ryanve:自定义数据属性可以正常工作。

标签: javascript jquery internet-explorer attr


【解决方案1】:

如果您使用大小写混合的属性名称,似乎 attr() 在 IE 中将失败。确保属性名称全部使用小写字母。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。我有一些表单,我想轻松设置该字段是否需要。我的表单输入如下所示:

    < 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() 方法添加这种更改,那不是很好吗!

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

    【讨论】:

      【解决方案3】:

      attr() 在 IE 中工作没有问题。列出的错误描述是:

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

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

      【讨论】:

        【解决方案4】:

        我一直在 IE 上使用 attrdata-* 属性,我从来没有遇到过问题。 Here's a live version,刚刚在 IE6、IE7 和 IE9 中测试过。不要把我的 IE8 盒子放在手边,但我从来没有遇到过问题。

        【讨论】:

        • 我意识到了这个问题。我将它放在基于 CSS3 媒体查询的 if 语句中。这是 IE8 或更低版本不原生支持的媒体查询。感谢您的工作示例!
        【解决方案5】:

        请试试这个:

        $this.data('websrc'); 而不是$this.attr('data-websrc');

        【讨论】:

        • 两者都可以。使用data 访问data-* 属性只是增加了一层复杂性。
        • @abdullah 这两个都可以在 FF/Chrome/Safari/Opera 中使用,但在 IE 中似乎都无法使用。
        • @T.J.克劳德感谢您的评论。我知道。但如果问题可以解决,我建议 OP 只使用它。
        • @T.J.并发症?您认为哪种方法更快?
        • @ryanve:我怀疑在正常用例中是否可测量更快,你必须做一个非常紧密的循环才能注意到,但 jQuery 的 data 去除了data-* 属性(有关详细信息,请参阅文档)。充其量,data 最终会做attr 所做的事情,因此我直接通过attr
        猜你喜欢
        • 2012-09-21
        • 1970-01-01
        • 1970-01-01
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多