13个需要知道的方法:使用 JavaScript 来操作 DOM

开发 前端
DOM 或文档对象模型是 web 页面上所有对象的根。它表示文档的结构,并将页面连接到编程语言。它的结构是一个逻辑树。每个分支结束于一个节点,每个节点包含子节点、对象。DOM API非常庞大,在本文中,咱们只讨论比较常用有有用的那些API。

 DOM 或文档对象模型是 web 页面上所有对象的根。它表示文档的结构,并将页面连接到编程语言。它的结构是一个逻辑树。每个分支结束于一个节点,每个节点包含子节点、对象。DOM API非常庞大,在本文中,咱们只讨论比较常用有有用的那些API。

[[285186]]

document.querySelector & document.querySelectorAll

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

document.querySelectorAll 方法返回与指定的选择器组匹配的文档中的元素列表 (使用深度优先的先序遍历文档的节点)。返回的对象是 NodeList 。

  1. // 返回第一个 ul 元素 
  2. const list = document.querySelector('ul'
  3. // 返回所有类名为 info 或者 warning 的 div 元素 
  4. const elements = document.querySelectorAll('div.info, div.warning'); 

document.createElement

在一个 HTML 文档中, Document.createElement(tagName) 方法创建由 tagName 指定的 HTML 元素,或一个HTMLUnknownElement,如果tagName不被识别。

Node.appendChild

Node.appendChild()方法将节点添加到给定父节点的子节点列表的末尾。 请注意,如果给定的子代是文档中现有节点的引用,则它将移动到新位置。看看示例:

  1. let list = document.createElement('ul'); 
  2. ['北京''上海''深圳'].forEach(city => { 
  3.   let listItem = document.createElement('li'
  4.   listItem.innerText = city 
  5.   list.appendChild(listItem) 
  6. }) 
  7. document.body.appendChild(list) 

Node.insertBefore

此方法在给定的父节点内的子引用节点之前插入给定节点(并返回插入的节点)

伪代码如下所示:

  • 北京
  • 上海
  • 深圳

Node.insertBefore('厦门','北京')

  • 厦门
  • 北京
  • 上海
  • 深圳
  1. let list = document.querySelector('ul'); 
  2. let firstCity = list.querySelector('ul > li'); 
  3. let newCity = document.createElement('li'); 
  4. newCity.textContent = 'San Francisco'
  5. list.insertBefore(newCity, firstCity); 

Node.removeChild

Node.removeChild方法从DOM中删除一个子节点并返回删除的节点。 请注意,返回的节点不再是DOM的一部分,而是仍存在于内存中。 如果处理不当,可能会导致内存泄漏。

  1. let list = document.querySelector('ul'); 
  2. let firstItem = list.querySelector('li'); 
  3. let removedItem = list.removeChild(firstItem); 

Node.replaceChild

此方法替换父节点中的子节点(并返回替换后的旧子节点)。请注意,如果处理不当,此方法可能导致与Node.removeChild类似的内存泄漏问题。

  1. let list = document.querySelector('ul'); 
  2. let oldItem = list.querySelector('li'); 
  3. let newItem = document.createElement('li'); 
  4. newItem.innerHTML = '前端小智'
  5. let replacedItem = list.replaceChild(newItem, oldItem); 

Node.cloneNode

Node.cloneNode(deep) 方法返回调用该方法的节点的一个副本,deep(可选)表示是否采用深度克隆,如果为true,则该节点的所有后代节点也都会被克隆,如果为false,则只克隆该节点本身.

  1. let list = document.querySelector('ul'); 
  2. let clone = list.cloneNode(); 

Element.getAttribute方法返回元素上给定属性的值,反之亦然,Element.setAttribute设置给定元素上属性的值。

  1. let list = document.querySelector('ul'); 
  2. let clone = list.cloneNode(); 

Element.hasAttribute / Element.removeAttribute

Element.hasAttribute方法检查给定元素是否具有指定的属性,返回值为boolean。 通过调用Element.removeAttribute方法,我们可以从元素中删除具有给定名称的属性。

  1. let list = document.querySelector('ul'); 
  2. if (list.hasAttribute('id')) { 
  3.     console.log('list has an id'); 
  4.     list.removeAttribute('id'); 
  5. }; 

Element.insertAdjacentHTML

element.insertAdjacentHTML(position, text) 将指定的文本解析为HTML或XML,并将结果节点插入到DOM树中的指定位置。它不会重新解析它正在使用的元素,因此它不会破坏元素内的现有元素。这避免了额外的序列化步骤,使其比直接innerHTML操作更快。

position是相对于元素的位置,并且必须是以下字符串之一:

beforebegin:元素自身的前面。

afterbegin:插入元素内部的第一个子节点之前。

beforeend:插入元素内部的最后一个子节点之后。

afterend:元素自身的后面。

text是要被解析为HTML或XML,并插入到DOM树中的字符串。

  1. <!-- beforebegin --> 
  2. <div> 
  3.   <!-- afterbegin --> 
  4.   <p>Hello World</p> 
  5.   <!-- beforeend --> 
  6. </div> 
  7. <!-- afterend --> 

示例:

  1. var list = document.querySelector('ul'); 
  2. list.insertAdjacentHTML('afterbegin''<li id="first-item">First</li>'); 

总结

希望本文对你有所帮助,并且有助于你理解DOM。正确处理DOM树非常重要,如果操作不正确,可能会导致严重后果。

 

责任编辑:华轩 来源: segmentfault
相关推荐

2024-04-03 10:29:13

JavaScrip优化技巧

2023-05-08 16:06:33

2023-03-19 16:02:33

JavaScrip技巧编程语言

2022-08-10 12:02:52

面试JavaScript

2009-06-30 13:00:30

JSP入门

2021-12-14 09:12:40

Gopher结构体接口

2020-03-27 12:30:39

python开发代码

2010-09-08 15:47:08

JavsScriptJavaScript

2017-10-24 11:59:41

JavaScript

2023-01-09 17:23:14

CSS技巧

2013-03-04 09:34:48

CSSWeb

2022-07-26 09:02:15

ES6ES13ECMAScript

2022-09-27 14:36:57

JavaScrip数组开发

2021-09-02 08:24:41

TypeScript 泛型前端

2013-07-11 13:56:37

大数据

2022-07-06 15:51:48

浏览器开发者工具

2023-12-05 08:02:51

JavaScript字符串功能

2015-09-20 16:23:27

2010-06-03 11:39:28

网络性能

2015-03-24 13:31:06

点赞
收藏

51CTO技术栈公众号