【总结向】HTML Attributes 和 DOM Properties

1,087 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

带着问题学习

  1. 什么是HTML Arrtibutes?
  2. 什么是 DOM Properties?
  3. 两者区别是什么? vue3中是怎么用的? 经验之谈,根据不同情况去做特殊设置

什么是HTML Arrtibutes?

在 HTML 中,标签可能拥有特性(attributes)。当浏览器解析 HTML 文本,并根据标签创建 DOM 对象时,浏览器会辨别 标准的 特性并以此创建 DOM 属性。

当有标准的的特性时(attributes),DOM也会有相同的属性(Properties)

但是不是所有的特性都会在DOM上有相同的属性, 比如<input>标签的type特性。在<div>标签上就没有

特性的方法如下

  • elem.hasAttribute(name) — 检查特性是否存在。
  • elem.getAttribute(name) — 获取这个特性值。
  • elem.setAttribute(name, value) — 设置这个特性值。
  • elem.removeAttribute(name) — 移除这个特性。
  • elem.attributes — 获取所有的特性
  <body someAttr="no">
    <script>
      console.log(document.body.attributes);
    </script>
  </body>

image.png

HTML 特性都包含以下特征

  • 不区分大小写
  • 值是字符串类型

什么是 DOM Properties?

一个DOM对象有很多的属性,这些就叫做DOM Properties

image.png

我们可以自定义Dom对象的属性,也可以修改内建属性的原型

Element.prototype.sayHi = function() {
    alert(`Hello, I'm ${this.tagName}`); 
}; 
document.documentElement.sayHi(); // Hello, I'm HTML 
document.body.sayHi(); // Hello, I'm BODY

DOM属性和方法就像普通JavaScript对象一样

  • 区分大小写
  • 可以自定义

两者区别是什么?

属性—特性同步

当一个标准的特性改变,对应的属性也会随之改变,反之也是如此(除了一些特例)

<input>

<script>
  let input = document.querySelector('input');

  // 特性 => 属性
  input.setAttribute('value', 'text');
  alert(input.value); // text

  // 这个操作无效,属性 => 特性
  input.value = 'newValue';
  alert(input.getAttribute('value')); // text(没有被更新!)
</script>

核心原则:HTML Attribute 的作用是设置与之对应的DOM Properties的初始值

DOM属性是多种类型的

DOM属性可以是字符串,布尔值,对象,URL等等

非标准特性 dataset

所有以 “data-” 开头的特性均被保留供程序员使用。它们可在 dataset 属性中使用。

总结

  • 特性(attribute)— 写在 HTML 中的内容。
  • 属性(property)— DOM 对象中的内容。

简略的对比:

属性特性
类型任何值,标准的属性具有规范中描述的类型字符串
名字名字(name)是大小写敏感的名字(name)是大小写不敏感的

操作特性的方法:

  • elem.hasAttribute(name) — 检查是否存在这个特性。
  • elem.getAttribute(name) — 获取这个特性值。
  • elem.setAttribute(name, value) — 设置这个特性值。
  • elem.removeAttribute(name) — 移除这个特性。
  • elem.attributes — 所有特性的集合。

核心原则:HTML Attribute 的作用是设置与之对应的DOM Properties的初始值