【问题标题】:IE 9 getAttribute method workingIE 9 getAttribute 方法工作
【发布时间】:2013-04-29 09:29:04
【问题描述】:

我正在使用 setAttribute 方法设置一个名为(比如)titleDiv 的自定义属性

HTML 代码: <div id="Object" titleDiv="blank"></div>

Javascript 代码:

var Object=document.getElementById('Object'); Object.setAttribute("titleDiv","myDiv");

这在 IE 9 以外的所有浏览器中都可以正常工作。 getAttribute 也会发生同样的事情。

我在代码中广泛使用了上述自定义属性,我不应该更改结构。

上面的代码有什么替代方法可以让 IE 理解吗?

谢谢。

【问题讨论】:

  • 是什么让您认为 IE9 没有这样做?对我有用,前提是您使用实际的 DOM 元素而不是字面上的 Object: jsbin.com/ujadaj/1 (source)。
  • @BillyMoat:这特别是 class 属性,IE8 和更早版本确实存在问题,但幸运的是它通过名为 className 的属性反映。
  • get/setAttribute 在 IE 中已被破坏多年。使用非标准属性也不是一个好主意(因为您可以使用点表示法可靠地读取和设置标准属性),这就是存在 classdata– 属性的原因。但我想在这种情况下你别无选择。

标签: javascript html css internet-explorer-9


【解决方案1】:

更新答案基于问题编辑:

您正在使用您真正应该远离的标识符:Object。我建议同时更改id 您使用的变量的名称。所以:

<div id="theObject" titleDiv="blank"></div>

var theObject=document.getElementById('theObject');
theObject.setAttribute("titleDiv","myDiv");

Object 是 JavaScript 中的内置函数。由于元素的 id 被转储到全局命名空间中,我将避免使用任何内置 JavaScript 函数(ObjectFunctionDate 等)作为 id 值。出于类似的原因,不仅仅是为了不让自己和他人混淆,我会远离它们作为变量名。

也就是说,我 couldn't replicate the problem (source),所以虽然我仍然会更改 id 和变量名,但这可能不是问题。另见下文。


原答案

您在 DOM 元素实例上调用 setAttribute。你不能通过内置的Object 函数来做到这一点。

如果你使用 DOM 元素,它可以工作(即使在 IE9 上):

(function() {
  // Get an actual DOM element
  var target = document.getElementById("target");

  // Set the attribute
  target.setAttribute("titleDiv","myDiv");

  // Show the result
  display("Result: " + target.getAttribute("titleDiv"));

  function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = String(msg);
    document.body.appendChild(p);
  }
})();

Live Example | source

如果您使用 F12 开发人员工具并转到 HTML 选项卡,您可以看到 div 确实获得了该属性。 (请务必使用开发工具,不是“查看源代码”——“查看源代码”会显示从服务器发送的 HTML,而不是 DOM 的当前状态。)


旁注:使用不使用the data- prefix 的非标准属性是个坏主意。您可能希望将该信息向上提供给指定此信息的任何人。但这几乎肯定不是您遇到的问题。

【讨论】:

  • 实际上我的问题是我正在编写一个简单的拖放应用程序,并且在拖动结束时我调用了一个带有被拖动项目 id 的函数,它是一个简单的字符串。当我在 IE 上提醒该 id 时,它会显示函数 itemId() { [native code] }。这是什么?
  • @user1079065:我没有关注你。这与问题/答案有什么关系?
  • 我认为 IE 没有获取 getAttribute 但问题不同。它理解 getAttribute 它没有得到我作为属性传递给我的拖动结束函数的字符串
  • @user1079065:我刚刚看到问题编辑。我已经编辑了答案。
  • +1 用于非标准属性建议。对于 OP,因此您有一些争论:HTML5 为输入元素引入了 18 个新属性,因此您不能确定当前的非标准属性不会出现在 HTML 的某些未来版本中。一个特定的浏览器也可能会引入它自己的新属性(这就是网络向前发展的方式),希望它们将来会变得标准化。黄金法则是不要修改不属于你的对象(来自他人代码的宿主、内置或本地对象),并且只使用你提供的 API、属性和属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 2014-09-20
  • 2017-12-10
相关资源
最近更新 更多