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 图片截取工具jquery.imagecropper.js
Apr 09 Javascript
jQuery选中select控件 无法设置selected的解决方法
Sep 01 Javascript
JavaScript版DateAdd和DateDiff函数代码
Mar 01 Javascript
Jquery同辈元素选中/未选中效果的实例代码
Aug 01 Javascript
通过js简单实现将一个文本内容转译成加密文本
Oct 22 Javascript
编程语言JavaScript简介
Oct 16 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
Nov 23 Javascript
js实现增加数字显示的环形进度条效果
Feb 05 Javascript
微信小程序wepy框架笔记小结
Aug 08 Javascript
微信开发之微信jssdk录音功能开发示例
Oct 22 Javascript
js实现文字头像的生成代码
Mar 07 Javascript
基于vue中的scoped坑点解说
Sep 04 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中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
2012/04/02 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
判断日期是否能跨月查询的js代码
2014/07/25 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
Django 路由系统URLconf的使用
2018/10/11 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
django中使用POST方法获取POST数据
2019/08/20 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
pytorch中的自定义数据处理详解
2020/01/06 Python
Python3实现飞机大战游戏
2020/04/24 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
广州某公司软件工程师面试题
2014/12/22 面试题
设计师个人求职信范文
2014/02/02 职场文书
财务总经理岗位职责
2014/02/16 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
工会趣味活动方案
2014/08/18 职场文书
安全演讲稿开场白
2014/08/25 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
Pygame Event事件模块的详细示例
2021/11/17 Python
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers