原生DOM的Document对象

大家好,我是一碗周,一个不想被喝(内卷)的前端。如果写的文章有幸可以得到你的青睐,万分有幸~

这是【从头学前端】系列文章的第四十一篇-《Document对象》

概述

Document对象是什么

Document对象是DOM的标准规范中比较重要的对象之一。该对象提供了访问和更新HTML页面内容的属性和方法。

Document对象作为DOM访问和更新HTML页面内容的入口。简单的说,可以把Document对象理解为在DOM的标准规范中代码HTML页面。

Document对象提供的属性和方法,可以实现定位HTML页面中的元素,或者创建新的元素等功能。

现在我们来测试一下Document对象,HTML代码如下所示:

<body>
  <script>
    /*
      document 对象
      * DOM预定义 -> 已经被创建完毕,可以直接使用,无需创建
      * 如果直接打印得到的是 HTML 页面的源代码 -> 该对象代表当前 HTML 页面
    */
    console.log(document) // 得到当前 HTML 页面的源代码
    // 检测 document 是否是一个对象
    console.log(document instanceof Object) // true
    // document对象的属性和方法被定义在原型上
    console.log(Document.prototype) // 得到其属性和方法
  </script>
</body>

继承链关系

Document对象是继承与Node对象的。Node对象也是DOM的标准规范中的非常重要的对象之一,而Node对象又是继承与EventTarget对象。

示例代码如下:

<body>
  <script>
    console.log(Document.prototype instanceof Node)         // true
    console.log(Node.prototype instanceof EventTarget)      // true

    console.log(Document.prototype instanceof EventTarget)  // true
  </script>
</body>

Document对象的属性和方法多是继承于Node对象和EventTarget对象的。当然,也有一部分属性和方法是实现了HTMLDocument接口的。

定位页面元素

Document对象提供了属性和方法实现定位元素功能,这也是DOM的标准规范中Document对象的主要应用之一。

Document对象提供实现定位页面元素的方法具有如下几种

方法描述
getElementById()通过页面元素的id属性值定位元素。
getElementsByName()通过页面元素的name属性值定位元素。
getElementByTagName()通过页面元素名称定位元素。
getElementByClassName()通过页面元素的class属性值定位元素。
querySelector()通过CSS选择器定义第一个匹配的元素
querySelectorAll()通过CSS选择器定义匹配的所有元素

ID属性值定位元素

HTML页面元素的id属性的特点是唯一、不可重复的,所以通过这种方式定位的HTML页面元素也是唯一的。语法结构如下

var element = document.getElementById(id);

参数

  • element:一个Element对象。

  • id:大小写敏感的字符串,代表了所要查找的元素的唯一ID。

返回值

  • 返回一个匹配到ID的DOM Element对象。若在当前Document下没有找到,则返回null

示例代码

<body>
  <div id="div1"></div>
  <script>
    // 通过Document对象的getElementById()方法定义元素
    var div1 = document.getElementById('div1')
    // 测试打印结果 -> 结果为对象元素的 HTML 代码
    console.log(div1)
    // 在DOM中无论是使用的还是得到的结果都应该是一个对象
    console.log(div1 instanceof Object) // true
    // DOM 中提供了一系列对象,对应 HTML 页面的每一个元素。
    // <div> 元素对应具有HTMLDivElement对象
    console.log(div1 instanceof HTMLDivElement) // true
  </script>
</body>

name属性定位元素

由于name属性不唯一,得到的结果可能是多个,也有可能是一个

语法结构如下

var elements = document.getElementsByName(name) 

参数

  • elements:一个实时更新的NodeList集合。

  • name:元素的name属性的值。

返回值

  • 一个NodeList集合,是一个类数组,如果想要得到某个元素的话,需要使用索引值

示例代码

<body>
  <div name="divs"></div>
  <div name="divs"></div>
  <div name="divs"></div>
  <script>
    // name 属性不唯一,得到的结果可能是多个,也有可能是一个
    var divs = document.getElementsByName('divs')
    // 得到的是一个 NodeList 集合, 是一个类数组对象。如果想要得到某个元素的话,需要使用索引值
    console.log(divs instanceof NodeList) // true
    console.log(divs[0])
  </script>
</body>

元素名定位元素

使用元素名定位属性的话类似于使用name属性的值定位属性,不同的是getElementsByTagName()返回一个包括所有给定标签名称的元素的HTML集合HTMLCollection。

语法结构如下

var elements = document.getElementsByTagName(name);

参数

  • elements:一个由发现的元素出现在树中的顺序构成的动态的HTML集合HTMLCollection。

  • name:一个代表元素的名称的字符串。特殊字符"*"代表了所有元素。

示例代码

<body>
  <div></div>
  <div></div>
  <div></div>
  <script>
    var boxes = document.getElementsByTagName('div')
    // 得到的是一个 HTMLCollection 集合, 是一个类数组对象。如果想要得到某个元素的话,需要使用索引值
    console.log(boxes)
    console.log(boxes[0])
  </script>
</body>

class属性定位元素

语法结构

var elements = document.getElementsByClassName(names);

参数

  • elements:一个实时集合,包含了找到的所有元素。

  • names:一个字符串,表示要匹配的类名列表;类名通过空格分隔

示例代码

<body>
  <div class="boxes"></div>
  <div class="boxes"></div>
  <div class="boxes"></div>
  <script>
    var divs = document.getElementsByClassName('boxes')
    // 得到的是一个 HTMLCollection 集合, 是一个类数组对象。如果想要得到某个元素的话,需要使用索引值
    console.log(boxes) 
    console.log(boxes[0])
  </script>
</body>

值得说一下的是,getElementsByClassName()的参数可以是多个class属性值,示例代码如下:

var div = document.getElementsByClassName('boxes cls')

querySelector()方法

querySelector()方法返回文档中与指定选择器或选择器组匹配的第一个HTML元素Element。 如果找不到匹配项,则返回null

语法结构如下

var element = document.querySelector(selectors);

参数说明:

  • selectors:表示选择器,可以包含一个或者多个CSS选择器,多个使用逗号分隔;如果不是选择器,则引发SYNTAX_ERR异常。

示例代码如下

<body>
  <button id="btn">按钮</button>
  <button class="btns">按钮</button>
  <button class="btns">按钮</button>
  <button class="btns">按钮</button>
  <script>
    var btn = document.querySelector('#btn')
    console.log(btn)
    // 仅仅返回第一个匹配的元素
    var btns = document.querySelector('.btns')
    console.log(btns)
  </script>
</body>

querySelectorAll()方法

querySelectorAll()方法与querySelector()方法不同的是,此方法返回的是一个静态的NodeList,包含一个与至少一个指定选择器匹配的元素的Element对象,或者在没有匹配的情况下为空NodeList。

语法结构如下

var NodeList = document.querySelectorAll(selectors);

参数说明:

  • selectors:表示选择器,可以包含一个或者多个CSS选择器,多个使用逗号分隔;如果不是选择器,则引发SYNTAX_ERR异常。

示例代码如下

<body>
  <button id="btn">按钮</button>
  <button class="btns">按钮</button>
  <button class="btns">按钮</button>
  <button class="btns">按钮</button>
  <script>
    var btn = document.querySelectorAll('#btn')
    console.log(btn)
    // 返回一个 NodeList 包含所有匹配的元素。
    var btns = document.querySelectorAll('.btns')
    console.log(btns)
  </script>
</body>

定位页面元素的属性

Document对象也提供了一些属性,来定位HTML页面中一些比较特殊的元素。

属性描述
document.documentElement获取HTML页面中的<html>元素
document.head获取HTML页面中的<head>元素
document.title获取HTML页面中的<title>元素
document.body获取HTML页面中的<body>元素
document.links获取HTML页面中的<a>元素
document.images获取HTML页面中的<img>元素

示例代码如下

<body>
  <img src="" alt="">
  <img src="" alt="">
  <img src="" alt="">
  <script>
    console.log(document.documentElement)   // <html>
    console.log(document.head)              // <head>
    console.log(document.body)              // <body>
    
    // 与其他几个不同的是 images 这个属性,他返回的是一个集合
    console.log(document.images)
  </script>
</body>

创建页面元素

创建元素节点

Document对象提供了createElement()方法创建元素节点,其语法结构如下:

var element = document.createElement(tagName);
  • tagName:表示要创建的元素名称。

该方法返回一个新的元素。

示例代码如下

<body>
  <script>
      // 创建一个 <button> 元素
      var btn = document.createElement('button')
      // 获取父级元素
      var body = document.body
      // 向父级添加子节点
      body.appendChild(btn)
  </script>
</body>

appendChild() 方法是向HTML页面添加节点

创建文本节点

Document对象提供了createTextNode()方法创建文本节点,其语法结构如下

var text = document.createTextNode(data);
  • data:是一个字符串,包含了要放入文本节点的内容。

返回值是创建的文本节点

示例代码如下

<body>
  <script>
      // 创建一个 <button> 元素
      var btn = document.createElement('button')
      // 创建文本节点
      var text = document.createTextNode('按钮')
      // 向<button>元素添加子节点
      btn.appendChild(text)
      // 获取父级元素
      var body = document.body
      // 向父级添加子节点
      body.appendChild(btn)
  </script>
</body>

创建属性节点

Document对象提供了createAtrribute()方法创建属性节点,其语法结构如下;

var attributeNode = document.createAttribute(name);
  • name:表示属性的名称

返回值是一个创建的属性节点

注意:创建属性节点方法只具有属性名称,没有属性值。想要设置属性值需要通过nodeValue()属性完成。

由于属性节点不是元素节点的子节点,不能使用添加子节点方式操作属性节点。想要添加属性节点需要通过 setAttributeNode()方法完成。

示例代码如下

<body>
  <script>
      // 创建一个 <button> 元素
      var btn = document.createElement('button')
      // 创建文本节点
      var text = document.createTextNode('按钮')
      // 向<button>元素添加子节点
      btn.appendChild(text)
      // 创建属性节点
      var attrNode = document.createAttribute('id')
      // 为属性节点设置值
      attrNode.nodeValue = 'btn'
      // 为<button>设置属性节点
      btn.setAttributeNode(attrNode)
      // 获取父级元素
      var body = document.body
      // 向父级添加子节点
      body.appendChild(btn)
  </script>
</body>

{完}

写在最后

你如果看到这里,我感到很荣幸,如果你喜欢这篇文章,你可以为这篇文章点上一个小赞;你如果喜欢这个专栏,我会一直更新到百篇以上,可以点一下后面的链接从头学前端 - 一碗周的专栏进入之后给个关注。

最后也可以给我点个关注,万分荣庆。

往期推荐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一碗周.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值