使用new或createElement创建的自定义元素为何缺失is属性?
自定义元素创建后缺少
is属性是否属于Bug? 这不是Bug,是浏览器对自定义元素的属性展示机制,以及DOM属性和HTML属性的差异导致的,具体分两种创建方式解释:
1. 通过new CustomDiv()创建的元素
这种方式直接实例化自定义类,生成的是自定义内置元素。浏览器不会在DOM检查器的HTML属性列表里显示is属性——因为它是通过类继承直接生成的实例,而非基于基础<div>元素通过is标记扩展的形式。但你可以通过JavaScript访问元素的is DOM属性拿到对应值:
console.log(newElement.is); // 输出 "custom-element"
2. 通过createElement('div', {is: 'custom-element'})创建的元素
MDN文档里说的“新创建的元素会被赋予值为自定义元素标签名的is属性”,指的是DOM对象的属性(JavaScript层面),而非显式的HTML属性(DOM检查器里看到的属性列表)。你可以通过代码验证:
console.log(anotherNewElement.is); // 输出 "custom-element" console.log(anotherNewElement.getAttribute('is')); // 输出 null,因为未设置HTML属性
如果希望is属性在DOM检查器中显示,需要手动调用setAttribute添加:
anotherNewElement.setAttribute('is', 'custom-element');
简单来说,DOM检查器只展示你显式设置的HTML属性,而MDN提到的is是元素的内置DOM属性,二者不是同一个概念,所以这不属于浏览器Bug。
内容的提问来源于stack exchange,提问作者RDU
相关产品推荐
相关产品推荐

