dom 属性节点(attribute)指 html 中的原始字符串值,通过 getattribute()/setattribute() 操作,适用于自定义属性、布尔属性等;属性(property)是 dom 对象的 js 属性,如 element.id、element.disabled,更高效且反映实时状态。

DOM 元素的属性节点(Attribute)和属性(Property)常被混淆,但它们在 JavaScript 中有明确区别:属性节点对应 HTML 标签中写的原始字符串(如 id="box"、data-count="5"),而属性是 DOM 对象上可读写的 JS 属性(如 element.id、element.className)。设置和获取“属性节点的数值”,主要指操作 getAttribute() / setAttribute(),尤其适用于自定义属性(data-*)、布尔属性(disabled、checked)或需保留原始字符串值的场景。
用 setAttribute() 设置属性节点值
该方法将指定名称的属性节点添加或更新为给定字符串值。即使传入数字或布尔值,也会自动转为字符串:
-
element.setAttribute('data-id', 123)→ 实际写入data-id="123" -
element.setAttribute('disabled', true)→ 写入disabled=""(空字符串),而非disabled="true" - 对标准属性如
class、style也可用,但推荐优先使用element.className或element.style等专用属性,更高效且语义清晰
用 getAttribute() 获取属性节点原始值
返回属性节点的字符串值,不存在时返回 null(不是 undefined):
-
<div id="box" data-price="9.99" disabled></div>el.getAttribute('id')→"box"el.getAttribute('data-price')→"9.99"(注意是字符串,不是数字)el.getAttribute('disabled')→""(存在即为空字符串,不管是否显式赋值) - 区分
getAttribute('value')和element.value:前者取 HTML 初始值(如<input value="abc">),后者取当前用户输入值
data-* 属性建议用 dataset API
对于 data- 开头的自定义属性,推荐使用 element.dataset,它自动处理驼峰转换并支持直接读写:
-
<div data-user-id="100" data-last-login="2024-05-01"></div>el.dataset.userId→"100"el.dataset.lastLogin→"2024-05-01"el.dataset.userId = "200"→ 自动设置data-user-id="200" -
dataset值始终是字符串;如需数字,需手动parseInt()或parseFloat()
布尔属性要小心“存在即真”规则
像 disabled、checked、readonly 这类布尔属性,其“有无”决定状态,而非属性值内容:
-
el.setAttribute('disabled', 'false')不会启用元素——只要disabled属性存在,元素就禁用 - 正确启用:
el.removeAttribute('disabled')或el.disabled = false(操作 property 更直观) - 判断是否禁用:
el.hasAttribute('disabled')检查属性节点是否存在;el.disabled直接读取当前生效状态(更可靠)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











