5

我们有一个 setAttribute 方法,用于 DOM 元素。

https://developer.mozilla.org/en-US/docs/DOM/element.setAttribute

它与使用以下内容有何不同?

 domElement.propName = value

这两种方法有什么好处吗?

谢谢。

4

1 回答 1

8

domElement.setAttribute('propName', obj)正在设置一个 XML 属性,它将被转换为一个字符串并添加到 DOM 标记中。

domElement.propName正在设置一个 expando 属性,它可以是任何类型。它将它设置在包装 DOM 对象实现的 JS 对象上。

它们没有相同的效果,除非您正在处理解析器识别的属性,例如src,id,value. 这些属性被复制到 expando 属性,但是有很多兔子洞和它不能可靠工作的情况(通常当 expando 不带字符串时,比如onclick, checked

这个例子表明它们是不同的。

domElement.setAttribute('someProp', 5);
console.log(domElement.someProp); // undefined
domElement.someProp = 10; 
console.log(domElement.someProp); // 10
console.log(domElement.getAttribute('someProp')); // "5" -> it's a string 

始终使用 DOM expando 属性不太可能引起麻烦。您想要使用 setAttribute 的唯一情况是您需要序列化节点(使用outerHTML)并且您希望该属性反映在序列化中

于 2012-10-03T23:14:15.187 回答