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选择没有colspan属性的td的代码
Jul 06 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
Jan 11 Javascript
3款实用的在线JS代码工具(国外)
Mar 15 Javascript
JavaScript中自定义事件用法分析
Dec 23 Javascript
js实现的页面矩阵图形变换特效
Jan 26 Javascript
JS实现购物车特效
Feb 02 Javascript
JS中Swiper的使用和轮播图效果
Aug 11 Javascript
二维码图片生成器QRCode.js简单介绍
Aug 18 Javascript
微信小程序日历效果
Dec 29 Javascript
JS阻止事件冒泡的方法详解
Aug 26 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 Javascript
jQuery三组基本动画与自定义动画操作实例总结
May 09 jQuery
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
咖啡与水的关系
2021/03/03 冲泡冲煮
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php使用正则验证中文
2016/04/06 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
Javascript实现前端简单的路由实例
2016/09/11 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
pandas中的series数据类型详解
2019/07/06 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
大学自我鉴定
2013/12/20 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
2014年党课学习材料
2014/05/11 职场文书
管理人员岗位职责
2015/02/14 职场文书
寒假致家长的一封信
2015/10/10 职场文书
nginx优化的六点方法
2021/03/31 Servers
实例讲解Python中sys.argv[]的用法
2021/06/03 Python