为什么设置 element.className = null 会导致 class=“null”
Why does setting element.className = null result in class="null"?
显然,尝试将className
属性设置为 null 不会擦除 class
属性 - 相反,它会将其替换为字面上称为"null"的类名:
document.querySelector('p:nth-of-type(2)').className = null;
p[class]::before {
content: '<p class="' attr(class) '">';
}
p:not([class])::before, p[class=""]::before {
content: '<p>';
}
p.null {
color: red;
}
<p class="a b c">
<p class="x y z">
最重要的是,有完整的互操作。
我本来希望className = null
删除 class
属性,或者null
会为了className
而转换为空字符串,或者至少会产生 TypeError。
什么给?
在 JavaScript 中,null
不会转换为空字符串。它转换为字符串"null"
.如果您手动转换它,您可以看到以下内容:
var x = String(null);
console.log(x);
这在 MDN 的DOMString
文档中也提到过:
将
null
传递给接受DOMString
的方法或参数通常会字符串化为"null"
。
className
属性(以及相关的属性,如id
(是DOMString
类型,它直接映射到JS中的String
。正是这种转换产生了一个字面上称为"null"的类名,然后反映在 class
属性中,并由 .null
和 [class~=null]
等选择器匹配。
如果您希望null
转换为空字符串,因为两者都是假值,则它不会以这种方式工作。仅仅因为两个值是假的,即两个值在转换为布尔值时都会导致false
,并不能使这两个值彼此相等,甚至不会松散地相等。特别是,大多数对象,包括字符串,永远不会松散地等于null
,因为某些东西不能等于什么(由于遗留原因有一些例外(。在 MDN 中有一个方便的比较表,您可以参考。
要擦除 class
属性并从元素中删除所有类名,请将 className
设置为空字符串而不是 null:
document.querySelector('p:nth-of-type(2)').className = '';
p[class]::before {
content: '<p class="' attr(class) '">';
}
p:not([class])::before, p[class=""]::before {
content: '<p>';
}
p.null {
color: red;
}
<p class="a b c">
<p class="x y z">
(如果您不关心浏览器兼容性,您还可以迭代classList
并单独删除每个类。有趣的是,对于性能迷来说,修改classList
实际上比设置className
更快——请参阅下面的评论。据推测,设置className
也有更新classList
的副作用,这可能是它变慢的原因。
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 数组在递归方法中设置为null
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 无法获取属性'selectedIndex'的未定义引用或null引用
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 来自文本输入null的html javascript变量
- 通过id和class属性获取元素
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- php代码在textbox更改事件上显示null
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- 在php中提交数据时,如果某些值为null,而某些值为非null,如何进行查询
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 为什么localStorage[“..”]未定义,而localStorage.getItem(“..”)为null
- ajax在输入等于null时进行检查
- html+javascript:如何在某些条件下禁用dropdownlist中的null选项
- 未捕获的类型错误:无法读取属性'状态'在react中为null
- contentWindow.document.body is null
- 在经过DATE验证的列中创建null值
- 为什么设置 element.className = null 会导致 class=“null”