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 相关文章推荐
jQuery数组处理代码详解(含实例演示)
Feb 03 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
JavaScript中的acos()方法使用详解
Jun 14 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
Dec 07 Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
Jan 16 Javascript
JS将unicode码转中文方法
May 08 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
Jun 01 Javascript
angularjs $http调用接口的方式详解
Aug 13 Javascript
微信小程序的tab选项卡的实现效果
May 15 Javascript
JavaScript实现星级评价效果
May 17 Javascript
JS实现点餐自动选择框(案例分析)
Dec 10 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.NET的入门教程
2006/10/09 PHP
PHP获取url的函数代码
2011/08/02 PHP
使用php显示搜索引擎来的关键词
2014/02/13 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
广告显示判断
2006/08/31 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
vue项目中使用ueditor的实例讲解
2018/03/05 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
python自动翻译实现方法
2016/05/28 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
django中send_mail功能实现详解
2018/02/06 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Django单元测试工具test client使用详解
2019/08/02 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
python PIL模块的基本使用
2020/09/29 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
爱祖国爱家乡演讲稿
2014/09/02 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
大国崛起日本观后感
2015/06/02 职场文书