深入了解parentNode,parentElement,childNodes,children的区别,一看就懂
今天是准备面试的第七天,js是由ECMAScript、文档对象模型(DOM)和浏览器对象模型(BOM)组成,我们今天就了解下与DOM有关的常用接口parentNode,parentElement,childNodes,children。
parentNode,parentElement,childNodes和children都是对节点的操作,因此我们需要对dom树有一定的了解,在文档对象模型中,每一部分都是由节点组成(包括document都是一个节点),节点的类型一共有三种:元素节点,属性节点,文本节点,由上面的图可以看出属性节点是元素节点的一个分支,一般不会考虑。
一、childNodes和children的区别
1、childNodes
返回当前元素子节点的所有类型节点(包括:空格和换行符都会都会被默认成文本节点)
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><div class="parent"><ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></div><script type="text/javascript">var ul = document.querySelector('ul')console.log(ul.childNodes);console.log(ul.childNodes.length);</script></body>
</html>
是不是很奇怪,为什么有这么多文本节点?我们打开看看,这些文本的内容是什么
这说明,该节点下的回车符和空格也会被childNodes当成文本节点,我们尝试着给li元素节点添加属性,我们会发现length的长度还是没有改变,也就是在说childNodes只返回文本节点和元素节点。
有些不怀好意的人会说,我不想要回车空格的文本节点,这应该怎么办呢?
那我们需要知道每个节点都会有nodeType属性
- nodeType === 1 该节点为元素节点
- nodeType === 2 该节点为属性节点
- nodeType === 3 该节点为文本节点
我们就要用这个属性的特点来只获取元素节点
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><div class="parent"><ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></div><script type="text/javascript">const ul = document.querySelector('ul');const childNodes = ul.childNodes;let temp = 0;let newNodes = [];for(let i = 0; i < childNodes.length; ++i){if(childNodes[i].nodeType === 1){newNodes[temp++] = childNodes[i];}}console.log(newNodes);</script></body>
</html>
这样就得到了我们想要的结果,其实我们还可用children属性,来实现这个功能。
2.children
返回当前元素的子元素节点(不返回文本节点和属性节点)
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><div class="parent"><ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></div><script type="text/javascript">const ul = document.querySelector('ul'); console.log(ul.children);</script></body>
</html>
通过运行我们可以发现,只返回了元素节点,没有返回文本和属性节点
二、区别parentNode和parentElement
parentNode:和英语翻译一样,返回父节点
parentElement:返回父元素
DOM树每一部分都是由节点组成,节点是由元素节点,属性节点,文本节点三部分组成,从这里可以看出节点包含元素节点。从html中又可以知道父节点不可能是文本和属性节点。难道parentNode和parentElement返回的值都是一样的吗?不,不,不,html是根元素,document是一种特殊的节点,当当前节点的父节点是document时,parentNode返回的是#document,而parentElement返回值为空,这就是他们两最大的区别。
我光说可能会有点晕,还是上代码吧
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><div class="parent"><ul><li>1</li><li>2</li><li>3</li><li>4</li></ul></div><script type="text/javascript">const html = document.querySelector('html'); console.log(html.parentNode);console.log(html.parentElement);</script></body>
</html>
这是我对parentNode,parentElement,childNodes,children四个属性的见解,欢迎大家留言
深入了解parentNode,parentElement,childNodes,children的区别,一看就懂相关推荐
- parentNode,parentElement,childNodes,children的区别
转自链接,https://blog.csdn.net/CODING_1/article/details/78202693 转载于:https://www.cnblogs.com/RioPlus/p/1 ...
- parentNode,parentElement,childNodes,children最经典讲解
首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点组成的,节点 ...
- 【转】parentNode,parentElement,childNodes,children最经典讲解
点进去原文 首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点 ...
- js中parentNode,parentElement,childNodes,children
首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点组成的,节点 ...
- parentNode,parentElement,childNodes,children之间的区别
parentElement 获取对象层次中的父对象. parentNode 获取文档层次中的父对象. childNodes 获取作为指定对象直接后代的 HTML 元素和 TextNode 对象 ...
- 【JS】中parentNode,parentElement,childNodes,children之间的区别
parentElement 获取对象层次中的父对象. parentNode 获取文档层次中的父对象. childNodes 获取作为指定对象直接后代的 HTML 元素和 TextNode 对象的集合. ...
- parentNode,parentElement,childNodes,children区别
childNodes childNodes指的是返回当前元素子节点的所有类型节点,其中连空格和换行符都会默认文本节点 childNodes只会返回文本和元素的节点,并不能返回属性节点!!! child ...
- day31-33关于parentNode,parentElement,childNodes,children
找节点和找元素是不同的. childNodes和children区别在于,childNodes可能会找到文本节点,而children只会找到元素节点. parentNode和parentElement ...
- offsetParent与parentElement ,parentNode,parentElement,childNodes和children
offsetParent直接的将是影响元素位置的上级element,而parentElement与位置显示无关时dom中的上级element. 例如: <BODY> <div ...
最新文章
- 科技公司升职的谎言与真相
- 漫画详解:厌氧君和好氧君,谁才是明日之子?
- Dockerfile项目环境介绍
- jQuery formValidator表单校验代码生成器ver1.0
- yii2组件之下拉框带搜索功能(yii-select2)
- python三角形判断白盒测试的代码_进化的测试 软件测试,自动化测试,白盒测试,Python...
- 不同路径Python解法
- 数据结构与算法——递归、回溯与分治
- python字符串只留数字_Python数字和字符串(5/30)
- 使用C#创建Windows服务 并发布Windows 服务
- java spark es_ES-Spark连接ES后,ES Client节点流量打满分析
- 计算机控制系统笔记,计算机控制系统复习笔记.doc
- ios虚拟机安装(二)
- python和go哪个就业前景好_Python和Java就业前景对比
- xampp错误: mysql 非正常关闭._mysql数据库DBA实用技巧--为你的数据库开启Innodb监控...
- java big5到gb2312的编码转换
- 《css揭秘》读书笔记(1)-背景与边框
- 文兵生日--2010-12-1
- android 后台录制视频,Android实现视频录制
- range.FormulaR1C1属性
热门文章
- dotnet项目移植瑞芯微3568板卡
- 秋招进行时,我在面试网易,快手Java岗时遇到的面试题
- 有关Python的小工具 - picture
- web课程设计——仿小米商城(10个页面)HTML+CSS+JavaScript web前端课程设计 web前端课程设计代码 web课程设计 HTML网页制作代码...
- 保险箱模拟JAVA_保险箱模拟器
- 建立Hexo博客-1
- Github | 个人资料自述文件配置的不完全总结
- 聊聊SpringBoot应用启动优化
- 浏览器安全与XSS漏洞
- 生物发光检测仪——生物发光、化学发光等基于发光的测定通用型检测