如何使用 JavaScript 向 HTML 元素添加/更新属性?

IT技术 javascript html cross-browser
2021-02-01 14:48:14

我正在尝试找到一种使用 JavaScript 添加/更新属性的方法。我知道我可以用setAttribute()函数来做到这一点,但这在 IE 中不起作用。

4个回答

您可以在此处阅读有关属性在许多不同浏览器(包括 IE)中的行为的信息。

element.setAttribute()应该可以解决问题,即使在 IE 中也是如此。你试了吗?如果它不起作用,那么也许 element.attributeName = 'value'可能会起作用。

这有效。如果不存在则创建属性,如果存在则更新它。就其工作原理而言,这是否记录在某处?
2021-03-17 14:48:14
当我执行以下操作时:document.getElementById("nav").setAttribute("class", "active");它在 Chrome JS 控制台中工作,但在实际页面中它不起作用..有什么想法吗?顺便说一下,在实际页面中,我.jsbody范围结束之前包含了该文件
2021-03-20 14:48:14
@dev.e.loper DOM 规范是一个很好的起点:w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/...
2021-03-29 14:48:14

如果您想完全兼容,看似简单的事情实际上很棘手。

var e = document.createElement('div');

假设您要添加一个 id 'div1'。

e['id'] = 'div1';
e.id = 'div1';
e.attributes['id'] = 'div1';
e.createAttribute('id','div1')
除了 IE 5.5 中的最后一个之外,这些都可以工作(这在这一点上是古老的历史,但仍然是 XP 的默认设置,没有更新)。

但当然也有意外情况。在 8 之前不能在 IE 中工作:e.attributes['style'] 不会出错但不会实际设置类,它必须是 className: e['class']
但是,如果您使用的是属性,那么这将起作用:e.attributes['class']

总之,将属性视为文字和面向对象。

从字面上看,您只是希望它吐出 x='y' 而不要考虑它。这就是属性、setAttribute、createAttribute 的用途(IE 的样式异常除外)。但是因为这些确实是对象,所以事情可能会变得混乱。

由于您会遇到正确创建 DOM 元素而不是 jQuery innerHTML slop 的麻烦,我会将它视为一个并坚持使用 e.className = 'fooClass' 和 e.id = 'fooID'。这是一种设计偏好,但在这种情况下,尝试将对象视为对您不利的任何事物。

它永远不会像其他方法那样适得其反,只需注意 class 是 className 并且 style 是一个对象,所以它是 style.width 而不是 style="width:50px"。还要记住 tagName ,但这已经由 createElement 设置,因此您无需担心。

这比我想要的要长,但是 JS 中的 CSS 操作是一件棘手的事情。

这适用于id,而不适用于其他类似的东西data-toggle
2021-04-01 14:48:14
Windows XP 推出了 IE6,而不是 5.5。那将是可怕的。
2021-04-10 14:48:14

强制性jQuery 解决方案查找title属性并将其设置foo请注意,这会选择一个元素,因为我是通过 id 进行的,但是您可以通过更改选择器轻松地在集合上设置相同的属性。

$('#element').attr( 'title', 'foo' );
+1 用于 jQuery 解决方案。就我而言,由于我的工作要求,我试图避免使用 jQuery 并使用纯 javascript 生成它。我很高兴这两个答案都存在。谢谢。
2021-04-06 14:48:14

你想用这个属性做什么?它是一个 html 属性还是你自己的东西?

大多数时候你可以简单地将它作为一个属性来处理:想要在元素上设置标题?element.title = "foo"会做的。

对于您自己的自定义 JS 属性,DOM 是自然可扩展的(又名 expando=true),其简单的结果是您可以执行element.myCustomFlag = foo并随后毫无问题地阅读它。