1. 首页

13个攻城狮都该知道的JavaScript 来操作 DOM的技能

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

document.querySelector / document.querySelectorAll

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

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


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

document.createElement

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

Node.appendChild

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


let list = document.createElement('ul'); ['北京', '上海', '深圳'].forEach(city => { let listItem = document.createElement('li') listItem.innerText = city list.appendChild(listItem) }) document.body.appendChild(list)

Node.insertBefore

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

伪代码如下所示:

  • 北京
  • 上海
  • 深圳

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

  • 厦门
  • 北京
  • 上海
  • 深圳

let list = document.querySelector('ul'); let firstCity = list.querySelector('ul > li'); let newCity = document.createElement('li'); newCity.textContent = 'San Francisco'; list.insertBefore(newCity, firstCity);

Node.removeChild

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


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

Node.replaceChild

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


let list = document.querySelector('ul'); let oldItem = list.querySelector('li'); let newItem = document.createElement('li'); newItem.innerHTML = 'Js中文网 https://www.javascriptc.com'; let replacedItem = list.replaceChild(newItem, oldItem); //JS中文网 - 前端进阶资源分享 [www.javascriptC.com](https://www.javascriptc.com/)

Node.cloneNode

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


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

Element.getAttribute / Element.setAttribute

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


let list = document.querySelector('ul'); list.setAttribute('id', 'my-list'); let id = list.getAttribute('id'); console.log(id); // outputs my-list

Element.hasAttribute / Element.removeAttribute

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


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

Element.insertAdjacentHTML

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

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

beforebegin:元素自身的前面。
afterbegin:插入元素内部的第一个子节点之前。
beforeend:插入元素内部的最后一个子节点之后。
afterend:元素自身的后面。

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


<!-- beforebegin --> <div> <!-- afterbegin --> <p>JS中文网 - 前端进阶资源分享 [www.javascriptC.com](https://www.javascriptc.com/)</p> <!-- beforeend --> </div> <!-- afterend -->

示例:


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

总结

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



交流

干货系列文章汇总如下,觉得不错点个Star,欢迎 加群 互相学习。

作者:前端小智
链接:https://www.impressivewebs.com/10-essential-dom-methods-techniques-for-practical-javascript/

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:13个攻城狮都该知道的JavaScript 来操作 DOM的技能

链接:https://www.javascriptc.com/3439.html

« 4 个 useState Hook实战应用示例
Array.slice的8种不同用法,来看看你会了几个»
Flutter 中文教程资源

相关推荐

QR code