示例:

<!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]之间的点滴问题相关推荐

  1. 当小数遇上二进制——全面解析JS中的小数二进制计算(附赠0.1+0.2 !== 0.3问题解释)

    二进制小数如何转换为十进制 二进制转换十进制的方法是: 从二进制数的最低位开始,每一位乘以对应的2的幂数,然后将最终的结果小数部分与整数部分分别相加 对应的2的幂,以个位为0,向高位依次增1,向地位依 ...

  2. js中firstChild与firstElementChild及childNodes与children的区别

    firstChild: 获取指定元素的第一个子节点 (包括元素节点和文本节点) . 若父元素与第一个子元素之间存在空白节点,firstChild 获取到的将是空白节点而不是第一个子元素.这时可以使用 ...

  3. js中parentNode,parentElement,childNodes,children

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

  4. JS中使用offsetHeight 获取元素高度为0问题

    今天再写代码时,要获取 一个 ul 的高度,我就使用 offsetHeight ,但是获取出来的结果却是 0,试了好久,发现拼写语法都没有错,最后,发现是没有去除浮动问题,我 ul 里面的 li 使用 ...

  5. js中的blob,图片base64URL,file之间的关系

    js的base64编码和解码 英文是这样的:// atob() 将base64解码 // btoa() 将字符串转码为base64 var str = 'javascript'; window.bto ...

  6. js中preventDefault、stopPropagation、return false三者之间

    2019独角兽企业重金招聘Python工程师标准>>> preventDefault: preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认 ...

  7. js mysql json字符串转数组中_php数据库数据转换为js中的json对象

    / 1.在company数据user表中取出10条数据,保存为数组 2.在将数组转化为json格式,传递给js 3.用json解析器将传递过来的json字符串转化为json对象, 4.用documen ...

  8. java有push方法么_[Java教程]js中push和join方法使用介绍

    [Java教程]js中push和join方法使用介绍 0 2013-10-09 07:00:17 push和join方法想必大家并不陌生吧,在本文将为大家详细介绍下js中的push和join方法的使用 ...

  9. 深圳Web前端学习:js中的模块化--【千锋】

    深圳Web前端学习:js中的模块化–[千锋] 0.前言 我们知道最常见的模块化方案有CommonJS.AMD.CMD.ES6,AMD规范一般用于浏览器,异步的,因为模块加载是异步的,js解释是同步的, ...

最新文章

  1. 【camera】基于深度学习的车牌检测与识别系统实现(课程设计)
  2. Sagemaker快速学习
  3. 程序员幽默:一整天都在修复 bug 是啥感觉?
  4. addrinfo 结构
  5. python 电脑文件变动提醒_Python整理文件方法,效率提升100倍-docx是什么文件
  6. 军队计算机使用管理规定,军队通用计算机系统使用安全要求.doc
  7. eclipse新建服务器项目,使用eclipse快速新建spirngboot项目的方法
  8. 爬虫python能做什么-Python除了能做爬虫之外还能做什么?
  9. mfc 如何将cstring转byte_如何将PDF转成JPG?PDF转图片的技巧
  10. 2020-12-16子类对象指针强转成父类对象指针,父类对象指针调用子类函数问题(待整理)
  11. vc2008程序发布指南
  12. 如何复制百度文档中的内容
  13. Arcgis中的空间数据拓扑理论及规则
  14. javaweb网上商城系统
  15. 数据结构 图的邻接矩阵
  16. 最强大脑就是让你记得住--史上最高效的270个记忆法
  17. python线性回归预测波士顿房价_预测波士顿的房价|简单的线性回归入门
  18. TFT-LCD电路设计之时序控制电路(TCON)
  19. C语言rewind函数返回值为空,C语言rewind和fseek函数的用法详解(随机读写文件)...
  20. 初一学生上计算机教学内容,初一计算机教学工作计划.docx

热门文章

  1. 经纬度中的度分秒转化为小数形式
  2. linux 程序退出 调试,linux驱动程序调试常用方法(printk,OOP,strace,hacking,ioctl,/proc,kgdb)...
  3. 蓝牙模块HC-05使用指南
  4. 51单片机之LED灯
  5. python股票全套系统下载_GitHub - xiangjiaowangzi/stock: stock,股票系统。使用python进行开发。...
  6. 城市信息学-街景成像用于城市基础设施和服务的自动评估
  7. 【收藏】HUE配置HDFS报错Cannot access: /. The HDFS REST service is not available. “ ““
  8. js4eos支持EOS智能合约编译和部署了,再也不用编译EOS了
  9. linux环境kafka安装及配置
  10. Python爬取12306(火车票分析助手)!