Javascript ParentNode和ChildNode接口原理解析


Posted in Javascript onMarch 16, 2020

ParentNode 接口,ChildNode 接口

节点对象除了继承 Node 接口以外,还拥有其他接口。ParentNode接口表示当前节点是一个父节点,提供一些处理子节点的方法。ChildNode接口表示当前节点是一个子节点,提供一些相关方法。

ParentNode 接口

如果当前节点是父节点,就会混入了(mixin)ParentNode接口。由于只有元素节点(element)、文档节点(document)和文档片段节点(documentFragment)拥有子节点,因此只有这三类节点会拥有ParentNode接口。

ParentNode.children
children属性返回一个HTMLCollection实例,成员是当前节点的所有元素子节点。该属性只读。

下面是遍历某个节点的所有元素子节点的示例。

for (var i = 0; i < el.children.length; i++) {
 // ...
}

注意,children属性只包括元素子节点,不包括其他类型的子节点(比如文本子节点)。如果没有元素类型的子节点,返回值HTMLCollection实例的length属性为0。

另外,HTMLCollection是动态集合,会实时反映 DOM 的任何变化。

ParentNode.firstElementChild

firstElementChild属性返回当前节点的第一个元素子节点。如果没有任何元素子节点,则返回null。

document.firstElementChild.nodeName
// "HTML"

上面代码中,document节点的第一个元素子节点是<HTML>。

ParentNode.lastElementChild
lastElementChild属性返回当前节点的最后一个元素子节点,如果不存在任何元素子节点,则返回null。

document.lastElementChild.nodeName
// "HTML"

上面代码中,document节点的最后一个元素子节点是<HTML>(因为document只包含这一个元素子节点)。

ParentNode.childElementCount
childElementCount属性返回一个整数,表示当前节点的所有元素子节点的数目。如果不包含任何元素子节点,则返回0。

document.body.childElementCount // 13

ParentNode.append(),ParentNode.prepend()

append方法为当前节点追加一个或多个子节点,位置是最后一个元素子节点的后面。

该方法不仅可以添加元素子节点,还可以添加文本子节点。

var parent = document.body;

// 添加元素子节点
var p = document.createElement('p');
parent.append(p);

// 添加文本子节点
parent.append('Hello');

// 添加多个元素子节点
var p1 = document.createElement('p');
var p2 = document.createElement('p');
parent.append(p1, p2);

// 添加元素子节点和文本子节点
var p = document.createElement('p');
parent.append('Hello', p);

注意,该方法没有返回值。

prepend方法为当前节点追加一个或多个子节点,位置是第一个元素子节点的前面。它的用法与append方法完全一致,也是没有返回值。

ChildNode 接口

如果一个节点有父节点,那么该节点就拥有了ChildNode接口。

ChildNode.remove()
remove方法用于从父节点移除当前节点。

el.remove()

上面代码在 DOM 里面移除了el节点。

ChildNode.before(),ChildNode.after()
before方法用于在当前节点的前面,插入一个或多个同级节点。两者拥有相同的父节点。

注意,该方法不仅可以插入元素节点,还可以插入文本节点。

var p = document.createElement('p');
var p1 = document.createElement('p');

// 插入元素节点
el.before(p);

// 插入文本节点
el.before('Hello');

// 插入多个元素节点
el.before(p, p1);

// 插入元素节点和文本节点
el.before(p, 'Hello');

after方法用于在当前节点的后面,插入一个或多个同级节点,两者拥有相同的父节点。用法与before方法完全相同。

ChildNode.replaceWith()
replaceWith方法使用参数节点,替换当前节点。参数可以是元素节点,也可以是文本节点。

var span = document.createElement('span');
el.replaceWith(span);

上面代码中,el节点将被span节点替换。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JScript的条件编译
May 29 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
Jan 05 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
微信小程序 教程之小程序配置
Oct 17 Javascript
使用vue.js实现联动效果的示例代码
Jan 10 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
react native实现往服务器上传网络图片的实例
Aug 07 Javascript
JS高阶函数原理与用法实例分析
Jan 15 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
Sep 09 Javascript
JS数组splice操作实例分析
Oct 12 Javascript
详细分析vue表单数据的绑定
Jul 20 Javascript
JS手写一个自定义Promise操作示例
Mar 16 #Javascript
JS函数参数的传递与同名参数实例分析
Mar 16 #Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 16 #Javascript
JS函数本身的作用域实例分析
Mar 16 #Javascript
JavaScript实现tab栏切换效果
Mar 16 #Javascript
vue-cli3使用mock数据的方法分析
Mar 16 #Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
Mar 16 #Javascript
You might like
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
Python多线程经典问题之乘客做公交车算法实例
2017/03/22 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
django中send_mail功能实现详解
2018/02/06 Python
深入理解Python爬虫代理池服务
2018/02/28 Python
python中的二维列表实例详解
2018/06/19 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
python设置中文界面实例方法
2020/10/27 Python
python 模拟登录B站的示例代码
2020/12/15 Python
德国著名廉价网上药店:Shop-Apotheke
2017/07/23 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
迅雷Cued工作心得体会
2014/01/27 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
2014年客房部工作总结
2014/11/22 职场文书
2015年大学生实习评语
2015/03/25 职场文书
525心理健康活动总结
2015/05/08 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技