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 相关文章推荐
破解Session cookie的方法
Jul 28 Javascript
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
Apr 20 Javascript
比较全的JS checkbox全选、取消全选、删除功能代码
Dec 19 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
Jun 26 Javascript
用Javascript同时提交多个Web表单的方法
Dec 26 Javascript
解决jquery插件冲突的问题
Jan 23 Javascript
探讨js字符串数组拼接的性能问题
Oct 11 Javascript
js判断空对象的实例(超简单)
Jul 26 Javascript
Bootstrap 实现查询的完美方法
Oct 26 Javascript
JavaScript实现form表单的多文件上传
Mar 27 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
Jul 28 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
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
如何使用php输出时间格式
2013/08/31 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
深入理解js promise chain
2016/05/05 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
超实用的 30 段 Python 案例
2019/10/10 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
团员的自我评价
2013/12/01 职场文书
高中毕业自我评价
2014/02/08 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
敬老院标语
2014/06/27 职场文书
理财计划书
2014/08/14 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
开网店计划分析
2019/07/30 职场文书