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 相关文章推荐
js常见表单应用技巧
Jan 09 Javascript
js 获取浏览器高度和宽度值(多浏览器)
Sep 02 Javascript
基于jquery的一个图片hover的插件
Apr 24 Javascript
讨论html与javascript在浏览器中的加载顺序问题
Nov 27 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
JS使用正则表达式除去字符串中重复字符的方法
Nov 05 Javascript
JQueryMiniUI按照时间进行查询的实现方法
Jun 07 jQuery
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 Javascript
详解ES6 Promise对象then方法链式调用
Oct 20 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
Nov 25 Javascript
JavaScript实现多球运动效果
Sep 07 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
Oct 27 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
PHP+APACHE实现用户论证的方法
2006/10/09 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
Javascript常考语句107条收集
2010/03/09 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python如何为图片添加水印
2016/11/25 Python
Django开发的简易留言板案例详解
2018/12/04 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
python 实现端口扫描工具
2020/12/18 Python
CSS3实现缺角矩形,折角矩形以及缺角边框
2019/12/20 HTML / CSS
人事助理自荐信
2014/02/02 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
意向书范文
2014/03/31 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
MySQL存储过程及语法详解
2022/08/05 MySQL