今天是准备面试的第七天,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属性

  1. nodeType === 1 该节点为元素节点
  2. nodeType === 2 该节点为属性节点
  3. 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的区别,一看就懂相关推荐

  1. parentNode,parentElement,childNodes,children的区别

    转自链接,https://blog.csdn.net/CODING_1/article/details/78202693 转载于:https://www.cnblogs.com/RioPlus/p/1 ...

  2. parentNode,parentElement,childNodes,children最经典讲解

    首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点组成的,节点 ...

  3. 【转】parentNode,parentElement,childNodes,children最经典讲解

    点进去原文 首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点 ...

  4. js中parentNode,parentElement,childNodes,children

    首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点组成的,节点 ...

  5. parentNode,parentElement,childNodes,children之间的区别

    parentElement 获取对象层次中的父对象.   parentNode 获取文档层次中的父对象.   childNodes 获取作为指定对象直接后代的 HTML 元素和 TextNode 对象 ...

  6. 【JS】中parentNode,parentElement,childNodes,children之间的区别

    parentElement 获取对象层次中的父对象. parentNode 获取文档层次中的父对象. childNodes 获取作为指定对象直接后代的 HTML 元素和 TextNode 对象的集合. ...

  7. parentNode,parentElement,childNodes,children区别

    childNodes childNodes指的是返回当前元素子节点的所有类型节点,其中连空格和换行符都会默认文本节点 childNodes只会返回文本和元素的节点,并不能返回属性节点!!! child ...

  8. day31-33关于parentNode,parentElement,childNodes,children

    找节点和找元素是不同的. childNodes和children区别在于,childNodes可能会找到文本节点,而children只会找到元素节点. parentNode和parentElement ...

  9. offsetParent与parentElement ,parentNode,parentElement,childNodes和children

    offsetParent直接的将是影响元素位置的上级element,而parentElement与位置显示无关时dom中的上级element. 例如:   <BODY>   <div ...

最新文章

  1. 科技公司升职的谎言与真相
  2. 漫画详解:厌氧君和好氧君,谁才是明日之子?
  3. Dockerfile项目环境介绍
  4. jQuery formValidator表单校验代码生成器ver1.0
  5. yii2组件之下拉框带搜索功能(yii-select2)
  6. python三角形判断白盒测试的代码_进化的测试 软件测试,自动化测试,白盒测试,Python...
  7. 不同路径Python解法
  8. 数据结构与算法——递归、回溯与分治
  9. python字符串只留数字_Python数字和字符串(5/30)
  10. 使用C#创建Windows服务 并发布Windows 服务
  11. java spark es_ES-Spark连接ES后,ES Client节点流量打满分析
  12. 计算机控制系统笔记,计算机控制系统复习笔记.doc
  13. ios虚拟机安装(二)
  14. python和go哪个就业前景好_Python和Java就业前景对比
  15. xampp错误: mysql 非正常关闭._mysql数据库DBA实用技巧--为你的数据库开启Innodb监控...
  16. java big5到gb2312的编码转换
  17. 《css揭秘》读书笔记(1)-背景与边框
  18. 文兵生日--2010-12-1
  19. android 后台录制视频,Android实现视频录制
  20. range.FormulaR1C1属性

热门文章

  1. dotnet项目移植瑞芯微3568板卡
  2. 秋招进行时,我在面试网易,快手Java岗时遇到的面试题
  3. 有关Python的小工具 - picture
  4. web课程设计——仿小米商城(10个页面)HTML+CSS+JavaScript web前端课程设计 web前端课程设计代码 web课程设计 HTML网页制作代码...
  5. 保险箱模拟JAVA_保险箱模拟器
  6. 建立Hexo博客-1
  7. Github | 个人资料自述文件配置的不完全总结
  8. 聊聊SpringBoot应用启动优化
  9. 浏览器安全与XSS漏洞
  10. 生物发光检测仪——生物发光、化学发光等基于发光的测定通用型检测