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 相关文章推荐
lyhucSelect基于Jquery的Select数据联动插件
Mar 29 Javascript
js判断字符是否是汉字的两种方法小结
Jan 03 Javascript
Js判断CSS文件加载完毕的具体实现
Jan 17 Javascript
如何实现移动端浏览器不显示 pc 端的广告
Oct 15 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 Javascript
JS中Eval解析JSON字符串的一个小问题
Feb 21 Javascript
js控制台输出的方法(详解)
Nov 26 Javascript
jquery中绑定事件的异同
Feb 28 Javascript
详解小程序不同页面之间通讯的解决方案
Nov 23 Javascript
前端路由&amp;webpack基础配置详解
Jun 10 Javascript
js实现的在本地预览图片功能示例
Nov 09 Javascript
JavaScript 中的无穷数(Infinity)详解
Feb 13 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
又一个php 分页类实现代码
2009/12/03 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
护士自我鉴定
2013/10/23 职场文书
程序员岗位职责
2013/11/11 职场文书
关于迟到的检讨书
2014/01/26 职场文书
白血病募捐倡议书
2014/05/14 职场文书
会计求职信范文
2014/05/24 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
产品质量保证书范本
2015/02/27 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
mybatis 获取更新记录的id
2022/05/20 Java/Android