面试官:谈谈你知道的 DOM 常见的操作

前言
面试官:“谈谈你知道的 DOM 常见的操作”
紧张的萌新:“可以获取到 dom...”
面试官:“...”
······
大家好,我是 CoderBin,又来到了面试官系列,本次总结了 JavaScript 中 DOM 的一些常用操作。DOM 原生操作对前端开发人员来说是非常重要的,有助于理解某些框架深层次的底层实现。希望对大家有所帮助,谢谢!
如果文中有不对、疑惑的地方,欢迎在评论区留言指正🌻
高频面试总结
面试官系列文章
【1】面试官系列-专栏
一、DOM
文档对象模型 (DOM) 是 HTML
和 XML
文档的编程接口
它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容
任何 HTML
或XML
文档都可以用 DOM
表示为一个由节点构成的层级结构
节点分很多类型,每种类型对应着文档中不同的信息和(或)标记,也都有自己不同的特性、数据和方法,而且与其他类型有某种关系,如下所示:
DOM
也有很多类型的DOM
节点包含着其他类型的节点。接下来我们先看看其中的三种:
上述结构中,div
、p
就是元素节点,content
就是文本节点,title
就是属性节点
二、常见操作
日常前端开发,我们都离不开DOM
操作
在以前,我们使用Jquery
,zepto
等库来操作DOM
,之后在vue
,Angular
,React
等框架出现后,我们通过操作数据来控制DOM
(绝大多数时候),越来越少的去直接操作DOM
但这并不代表原生操作不重要。相反,DOM
操作才能有助于我们理解框架深层的内容
下面就来分析DOM
常见的操作,主要分为:
创建节点
查询节点
更新节点
添加节点
删除节点
三. 创建节点
1. createElement
创建新元素,接受一个参数,即要创建元素的标签名
2. createTextNode
创建一个文本节点
3. createDocumentFragment
用来创建一个文档碎片,它表示一种轻量级的文档,主要是用来存储临时节点,然后把文档碎片的内容一次性添加到DOM
中
当请求把一个DocumentFragment
节点插入文档树时,插入的不是 DocumentFragment
自身,而是它的所有子孙节点
4. createAttribute
创建属性节点,可以是自定义属性
四. 获取节点
1. querySelector
传入任何有效的 css
选择器,即可选中单个 DOM
元素(首个):
如果页面上没有指定的元素时,返回 null
2. querySelectorAll
返回一个包含节点子树内所有与之相匹配的Element
节点列表,如果没有相匹配的,则返回一个空节点列表
需要注意的是,该方法返回的是一个 NodeList
的静态实例,它是一个静态的“快照”,而非“实时”的查询
关于获取DOM
元素的方法还有如下,就不一一述说
除此之外,每个DOM
元素还有parentNode
、childNodes
、firstChild
、lastChild
、nextSibling
、previousSibling
属性,关系图如下图所示

五. 更新节点
1. innerHTML
不但可以修改一个DOM
节点的文本内容,还可以直接通过HTML
片段修改DOM
节点内部的子树
2. innerText、textContent
自动对字符串进行HTML
编码,保证无法设置任何HTML
标签
两者的区别在于读取属性时,innerText
不返回隐藏元素的文本,而textContent
返回所有文本
3. style
DOM
节点的style
属性对应所有的CSS
,可以直接获取或设置。遇到-
需要转化为驼峰命名
六. 添加节点
1. innerHTML
如果这个 DOM 节点是空的,例如,<div></div>
,那么,直接使用innerHTML = '<span>child</span>'
就可以修改DOM
节点的内容,相当于添加了新的DOM
节点
如果这个 DOM 节点不是空的,那就不能这么做,因为innerHTML
会直接替换掉原来的所有子节点
2. appendChild
把一个子节点添加到父节点的最后一个子节点。举个例子:
原dom
结构
添加一个p
元素
现在HTML
结构变成了下面
上述代码中,我们是获取DOM
元素后再进行添加操作,这个js
节点是已经存在当前文档树中,因此这个节点首先会从原先的位置删除,再插入到新的位置
如果动态添加新的节点,则先创建一个新的节点,然后插入到指定的位置
3. insertBefore
把子节点插入到指定的位置,使用方法如下:
子节点会插入到referenceElement
之前
4. setAttribute
在指定元素中添加一个属性节点,如果元素中已有该属性改变属性值
七. 删除节点
删除一个节点,首先要获得该节点本身以及它的父节点,然后,调用父节点的removeChild
把自己删掉
删除后的节点虽然不在文档树中了,但其实它还在内存中,可以随时再次被添加到别的位置
每文一句:树不修,长不直;人不学,没知识。
本次的分享就到这里,如果本章内容对你有所帮助的话欢迎点赞+收藏。文章有不对的地方欢迎指出,有任何疑问都可以在评论区留言。希望大家都能够有所收获,大家一起探讨、进步!
版权声明: 本文为 InfoQ 作者【CoderBin】的原创文章。
原文链接:【http://xie.infoq.cn/article/4792f92e46d3f4a0a7f79ee8c】。文章转载请联系作者。
评论