js中firstChild和childNodes[0]以及children[0]之间的点滴问题
示例:
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>js中firstChild和childNodes[0]以及children[0]之间的点滴问题</title></head><body><div id="div1"><p>pppppppppppppppp</p></div><script type="text/javascript">window.onload = function() {if (!document.getElementById("div1")) return false;var div1 = document.getElementById("div1");console.log(div1.firstChild);console.log(div1.firstChild.nodeType);console.log(div1.childNodes[0]);console.log(div1.childNodes[0].nodeType);console.log(div1.children[0]);console.log(div1.children[0].nodeType);console.log(document.getElementsByTagName("p")[0].firstChild.nodeValue);};</script></body>
</html>
运行结果入下:
分析:
从上面的代码以及运行结果可以看出,当使用上述三种方法去获取div1的第一个子元素(节点)的时候,本希望可以直接得到p元素,可是呢,三者的却出现了不一样的运行结果,firstChild和childNodes[0]的运行结果一样,都是将一个文本节点当做了div1的第一个子节点,这显然不是希望得到的结果,可是,这个文本节点是哪儿来的呢?原来,这两种方法都会将换行当做一个节点,即上面出现的文本节点。(从后面用firstChild打印p元素的节点值也可以看出,里面是包含了前后换行的)
而我们的children[0]的方法却显示出了“希望”的结果,是在与它的认知方式与前两个不一样,它只认识文档里面的HTML节点,而不会把换行也当做一个节点进行处理,即是说它是不认识文本节点的,所以,就可以得到元素节点p了。
分析过后,下面更改部分代码看看效果:
将
<div id="div1"><p>pppppppppppppppp</p></div>
改为
<div id="div1"><p>pppppppppppppppp</p></div>
并将
console.log(document.getElementsByTagName("p")[0].firstChild.nodeValue);
改为
console.log(document.getElementsByTagName("p")[0].firstChild);
console.log(document.getElementsByTagName("p")[0].childNodes[0]);
console.log(document.getElementsByTagName("p")[0].children[0]);
再次运行可得如下结果:
由上可以看出,当把div里面的换行都去除之后,三种方式都可以得到“一致”(姑且认为一致)的运行结果,即都将p元素作为它们的第一节点。从后面的三行打印结果可以证实children是真不认识文本节点的。不过,需要注意的是,firstChild和childNodes才是标准的,而遗憾的是children不是标准的。
js中firstChild和childNodes[0]以及children[0]之间的点滴问题相关推荐
- 当小数遇上二进制——全面解析JS中的小数二进制计算(附赠0.1+0.2 !== 0.3问题解释)
二进制小数如何转换为十进制 二进制转换十进制的方法是: 从二进制数的最低位开始,每一位乘以对应的2的幂数,然后将最终的结果小数部分与整数部分分别相加 对应的2的幂,以个位为0,向高位依次增1,向地位依 ...
- js中firstChild与firstElementChild及childNodes与children的区别
firstChild: 获取指定元素的第一个子节点 (包括元素节点和文本节点) . 若父元素与第一个子元素之间存在空白节点,firstChild 获取到的将是空白节点而不是第一个子元素.这时可以使用 ...
- js中parentNode,parentElement,childNodes,children
首先了解parentNode,parentElement,childNodes,children四大属性之前,必须对Dom树有一定的了解,在Dom文档结构中,HTML页面每一部分都是由节点组成的,节点 ...
- JS中使用offsetHeight 获取元素高度为0问题
今天再写代码时,要获取 一个 ul 的高度,我就使用 offsetHeight ,但是获取出来的结果却是 0,试了好久,发现拼写语法都没有错,最后,发现是没有去除浮动问题,我 ul 里面的 li 使用 ...
- js中的blob,图片base64URL,file之间的关系
js的base64编码和解码 英文是这样的:// atob() 将base64解码 // btoa() 将字符串转码为base64 var str = 'javascript'; window.bto ...
- js中preventDefault、stopPropagation、return false三者之间
2019独角兽企业重金招聘Python工程师标准>>> preventDefault: preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认 ...
- js mysql json字符串转数组中_php数据库数据转换为js中的json对象
/ 1.在company数据user表中取出10条数据,保存为数组 2.在将数组转化为json格式,传递给js 3.用json解析器将传递过来的json字符串转化为json对象, 4.用documen ...
- java有push方法么_[Java教程]js中push和join方法使用介绍
[Java教程]js中push和join方法使用介绍 0 2013-10-09 07:00:17 push和join方法想必大家并不陌生吧,在本文将为大家详细介绍下js中的push和join方法的使用 ...
- 深圳Web前端学习:js中的模块化--【千锋】
深圳Web前端学习:js中的模块化–[千锋] 0.前言 我们知道最常见的模块化方案有CommonJS.AMD.CMD.ES6,AMD规范一般用于浏览器,异步的,因为模块加载是异步的,js解释是同步的, ...
最新文章
- 【camera】基于深度学习的车牌检测与识别系统实现(课程设计)
- Sagemaker快速学习
- 程序员幽默:一整天都在修复 bug 是啥感觉?
- addrinfo 结构
- python 电脑文件变动提醒_Python整理文件方法,效率提升100倍-docx是什么文件
- 军队计算机使用管理规定,军队通用计算机系统使用安全要求.doc
- eclipse新建服务器项目,使用eclipse快速新建spirngboot项目的方法
- 爬虫python能做什么-Python除了能做爬虫之外还能做什么?
- mfc 如何将cstring转byte_如何将PDF转成JPG?PDF转图片的技巧
- 2020-12-16子类对象指针强转成父类对象指针,父类对象指针调用子类函数问题(待整理)
- vc2008程序发布指南
- 如何复制百度文档中的内容
- Arcgis中的空间数据拓扑理论及规则
- javaweb网上商城系统
- 数据结构 图的邻接矩阵
- 最强大脑就是让你记得住--史上最高效的270个记忆法
- python线性回归预测波士顿房价_预测波士顿的房价|简单的线性回归入门
- TFT-LCD电路设计之时序控制电路(TCON)
- C语言rewind函数返回值为空,C语言rewind和fseek函数的用法详解(随机读写文件)...
- 初一学生上计算机教学内容,初一计算机教学工作计划.docx
热门文章
- 经纬度中的度分秒转化为小数形式
- linux 程序退出 调试,linux驱动程序调试常用方法(printk,OOP,strace,hacking,ioctl,/proc,kgdb)...
- 蓝牙模块HC-05使用指南
- 51单片机之LED灯
- python股票全套系统下载_GitHub - xiangjiaowangzi/stock: stock,股票系统。使用python进行开发。...
- 城市信息学-街景成像用于城市基础设施和服务的自动评估
- 【收藏】HUE配置HDFS报错Cannot access: /. The HDFS REST service is not available. “ ““
- js4eos支持EOS智能合约编译和部署了,再也不用编译EOS了
- linux环境kafka安装及配置
- Python爬取12306(火车票分析助手)!