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 相关文章推荐
小议Function.apply() 之一------(函数的劫持与对象的复制)
Nov 30 Javascript
预加载css或javascript的js代码
Apr 23 Javascript
javascript判断两个IP地址是否在同一个网段的实现思路
Dec 13 Javascript
浅析jquery的js图表组件highcharts
Mar 06 Javascript
Node.js 的异步 IO 性能探讨
Oct 08 Javascript
javascript实现跨域的方法汇总
Jun 25 Javascript
6种javascript显示当前系统时间代码
Dec 01 Javascript
完美实现八种js焦点轮播图(下篇)
Apr 20 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
Vue中v-for的数据分组实例
Mar 07 Javascript
详解vue-cli中使用rem,vue自适应
May 06 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
Oct 24 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
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
js下载文件并修改文件名
2017/05/08 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
JS+DIV实现拖动效果
2020/02/11 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
使用js和canvas实现时钟效果
2020/09/08 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
便利店的创业计划书
2014/01/15 职场文书
旅游节目策划方案
2014/05/26 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
被告代理词范文
2015/05/25 职场文书
国庆节新闻稿
2015/07/17 职场文书
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis