【发布时间】:2017-01-12 08:14:22
【问题描述】:
我对“HTML 属性”和“DOM 元素的属性”之间的区别感到困惑。从this post 得知getAttribute("class") 返回前者,而element.className 返回后者。但是,我无法理解以下代码的输出:
var span = document.querySelector("#span");
console.log(span.className + ' ' + span.getAttribute("class"));
span.className = "bar";
console.log(span.className + ' ' + span.getAttribute("class"));
<span id="span" class="foo"><span>
我希望结果是
foo foo
bar foo
因为据我了解,我的 HTML 文件的内容在运行 javascript 时没有更改。此外,当我将span.className = "bar"; 行替换为span.setAttribute('class', 'bar'); 时,仍然会得到相同的结果。
我的问题是:“HTML 属性”和“DOM 元素的属性”有什么区别和关系?
【问题讨论】:
-
HTML 属性是您在标记中编写的内容。属性就像其他所有内容一样成为 DOM 的一部分。其中一些属性在创建时直接映射到 DOM 元素上的属性。其中,它们中的一个子集维护属性和属性之间的实时映射,因此当一个更改时两者都会更新。
class属性就是其中之一。 -
@squint 我认为这是一个不错的答案。
-
我会让你或其他人更深入地挖掘这一切的复杂性并发布答案。我在这里的工作已经完成......
-
就在
className位上,这个特定的名称是由于 JavaScript 语言的一个怪癖。当时,JavaScript 关键字不能用于属性名称,因此element.class将是一个错误。class是一个保留字,即使它当时没有被使用。具有讽刺意味的是,当class成为语言的一部分时,限制已被取消,并且可以安全地使用关键字作为属性名称。所以在这种情况下,class永远不会成为问题。
标签: javascript html dom