是否有任何原因导致“class”属性即使在通过classList.remove删除最后一个类后仍保留在HTML标记中?

Is there any reason why the "class" attribute stays in an HTML tag even after removing last class via classList.remove?

提问人:Enlico 提问时间:10/21/2023 更新时间:10/21/2023 访问量:49

问:

如果我执行以下代码片段,

s = document.createElement('span');
console.log(s)
s.classList.add('foo');
console.log(s)
s.classList.remove('foo');
console.log(s)

我得到这个输出:

<span></span>
<span class="foo"></span>
<span class></span>

为什么还在第三行?它有什么用吗?或者我可以认为它不存在吗?class

JavaScript HTML DOM

评论

0赞 Afzal K. 10/21/2023
属性仍将存在空值,因为您只删除了值类

答:

1赞 Afzal K. 10/21/2023 #1

classList属性用于操作属性中的类名,但属性本身仍将存在。要删除属性本身,您可以使用classclassremoveAttribute()

s = document.createElement('span');
console.log(s)

s.classList.add('foo');
console.log(s)

s.removeAttribute('class');
console.log(s)

1赞 VLAZ 10/21/2023 #2

它有什么用吗?

它是一个没有值的属性。不多也不少。这并不是真正的“特别”。它遵循正常规则,例如可以通过属性选择器进行匹配

[class] {
  font-size: 2em;
}

[class="foo"] {
  text-decoration: underline;
}

.foo {
  color: red;
}
<span>
  A
</span>

<span class>
  B
</span>

<span class="foo">
  C
</span>

或者我可以认为它不存在吗?

无价值属性的存在本身不会执行任何操作。虽然有人可能编写了一个仅使用其存在的选择器:class

  1. 这取决于特定的 HTML + CSS/JavaScript 应用程序。为“任何带有”的东西“设置属性选择器并不是一件普遍的事情。class
  2. 即使存在,也很少见。在绝大多数情况下,人们会希望使用特定的类。通常不值得关注属性的存在与否。

因此,总的来说,理论上可能会有不同的行为。但是,他们不太可能这样做。根据代码试图对这些内容执行的操作,将它们视为等效可能是安全的。<span><span class>