0

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

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

Javascript代码:

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

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

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

是否有任何替代方法可以编写上述代码以便 IE 理解它?

谢谢。

4

1 回答 1

3

根据问题编辑更新答案:

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

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

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

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

也就是说,我无法复制问题source),所以虽然我仍然会更改idand 变量名,但这可能不是问题。另见下文。


原答案

您调用setAttributeDOM 元素实例。你不通过内置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);
  }
})();

实例| 来源

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


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

于 2013-04-29T09:34:56.643 回答