javascript - element.setAttribute ('prop' ,value) vs element.prop = value

标签 javascript html dom cross-browser

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

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

它与使用下面的有何不同?

 domElement.propName = value

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

谢谢。

最佳答案

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)并且您希望该属性反射(reflect)在序列化中

关于javascript - element.setAttribute ('prop' ,value) vs element.prop = value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12718186/

相关文章:

html - 使用 CSS 定位

javascript - 如何将 iframe 视频的缩略图 100% 覆盖到 9 :16 aspect ratio? 中的包装器

javascript - 在 div 内绘制形状

java - 手动创建所有 Document 节点的 NodeList

javascript - 显示颜色选择器对话框而不显示输入选项?

javascript - 推送到 Backbone 中的属性

javascript - 如何从node js post ajax请求中读取数据?

javascript - 一个或两个数字正则表达式

javascript - 通过简单的JS强制iframe自动播放

html - 如何使用PowerShell的选择字符串从.htm文件中提取文件名?