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 相关文章推荐
让getElementsByName适应IE和firefox的方法
Sep 24 Javascript
JS 各种网页尺寸判断实例方法
Apr 18 Javascript
原生javascript获取元素样式
Dec 31 Javascript
javascript实现链接单选效果的方法
May 13 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
浅析Ajax语法
Dec 05 Javascript
解析JavaScript模仿块级作用域
Dec 29 Javascript
AngularJS报错$apply already in progress的解决方法分析
Jan 30 Javascript
vue+axios实现post文件下载
Sep 25 Javascript
ES6 Promise对象概念及用法实例详解
Oct 15 Javascript
JavaScript实现京东快递单号查询
Nov 30 Javascript
基于JavaScript实现简单扫雷游戏
Jan 02 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导出word格式数据的代码实例
2013/11/25 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
typecho插件编写教程(五):核心代码
2015/05/28 PHP
PHP children()函数讲解
2019/02/03 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
js 蒙版进度条(结合图片)
2010/03/10 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
Python FTP操作类代码分享
2014/05/13 Python
Python写的Socks5协议代理服务器
2014/08/06 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
Python模块WSGI使用详解
2018/02/02 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
python中怎么表示空值
2020/06/19 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
C#实现启动一个进程
2016/10/01 面试题
优秀村官事迹材料
2014/01/10 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
离婚被告代理词
2015/05/23 职场文书
金榜题名主持词
2015/07/02 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL