1:childNodes属性:

标准的,它返回指定元素的子元素集合,包括html节点,所有属性,文本。可以通过nodeType来判断是哪种类型的节点,只有当nodeType==1时才是元素节点,2是属性节点,3是文本节点。如果代码中有换行、空格就会增加文本节点,这样用它来返回真正的子节点就会不准确,具体见下面的例子。

除了IE9和Firefox,其他浏览器都支持通过childNodes[i]获取第i个子节点。

如果一定要用这个方法(毕竟他是W3C标准),就要增加一个判断子节点类型过程:

    function getFirst(elem){  for(var i=0,e;e=elem.childNodes[i++];){  if(e.nodeType==1)  return e;  }         }  

2:children属性:

非标准的,它返回指定元素的子元素集合。经测试,它只返回html节点,甚至不返回文本节点。且在所有浏览器下表现惊人的一致。和childNodes一样,在firefox下不支持()取集合元素。因此如果想获取指定元素的第一个html节点,可以使用children[0]来替代上面的getFirst函数。需注意children在IE中包含注释节点。

返回指定元素的子元素集合,只包括元素节点,不包括文本节点。

除了IE9和Firefox,其他浏览器都支持通过children[i]获取第i个子节点。

注意:children在IE中包含注释节点。

3、firstChild属性:

获取指定元素的第一个子节点,可以是元素节点,也可以是文本节点。

问题:若父元素与第一个子元素之间存在空白节点,firstChild获取到的将是空白节点而不是第一个子元素。

解决:使用firstElementChild属性。

问题:IE6/7/8中不支持firstElementChild属性。

解决:使用children[0]属性。

4、firstElementChild属性:

获取指定元素的第一个子元素节点,不会检测到文本节点。

5:总结+示例:

对于DOM元素

children是指DOM Object类型的子对象,不包括tag之间隐形存在的TextNode;

childNodes包括tag之间隐形存在的TextNode对象。

如果想获取到指定元素的子元素节点,最好使用children方法,childNodes方法及firstChild方法在现代浏览器中都会把空白节点检测出来,所以推荐以后使用children方法来替代childNodes。

具体看一下针对children和childNodes在chrome环境下的测试:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Insert title here</title>
</head>
<body>
<div id="div" class="div"><span id="span" class="span"></span>
</div>
</body>
<script type="text/javascript">function test() {var o = document.getElementById("div");var child = o.children;console.log("div.children运行结果:");for(i = 0; i < child.length; i++){console.log(child[i].tagName);}console.log("");child = o.childNodes;console.log("div.childNodes运行结果:");for(i = 0; i < child.length; i++){console.log(child[i].tagName);}}test();</script>
</html>

测试结果如下:

/

div.children运行结果:

SPAN

/

div.childNodes运行结果:

undefined

SPAN

undefined

上面childNodes集合的结果中有两个undefined节点,这两个就是nodeType=3的TextNode。

如果把HTML代码写成如下样式,那么children和childNodes的结果就没有差别了。

<div id="div" class="div"><span id="span" class="span"></span></div>

javascript中childNodes与children 区别 以及firstChild与firstElementChild区别相关推荐

  1. javascript中childNodes与children的区别

    1.childNodes:获取节点,不同浏览器表现不同: IE:只获取元素节点: 非IE:获取元素节点与文本节点: 解决方案:if(childNode.nodeName=="#text&qu ...

  2. 在Javascript中 声明时用var与不用var的区别,== 和 ===的区别

    今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var&qu ...

  3. JavaScript中String的slice(),substr(),substring()三者区别

    JavaScript中String的slice(),substr(),substring()三者区别 共同之处 从给定的字符串中截取片段,并返回全新的这片段的字符串对象,且不会改动原字符串. 具体不同 ...

  4. JavaScript中的ReferenceError和TypeError两种错误的区别

    转自JavaScript中的ReferenceError和TypeError两种错误的区别 作为前端工作人员,在调试JavaScript程序的时候经常遇到两个错误:ReferenceError和Typ ...

  5. JS/JavaScript中两个等号 == 和 三个等号 === 的区别

    JavaScript中两个等号 == 和 三个等号 === 的区别 一.概念 == 和 ===  (1)  "=="叫做相等运算符,"==="叫做严格运算符. ...

  6. javascript中数据类型及转换、String()和toString()的区别

    数据类型: JavaScript中的数据类型: 在计算机中,不同的数据类型所占的储存空间是不同的.1.原始数据类型:number (数字).string(字符串).boolean(布尔值).null( ...

  7. JavaScript中textContent、innerText和innerHTML的用法以及区别

    目录 0.码仙励志 1.textContent的用法 1.设置标签中的文本内容 2.获取标签中的文本内容 2.innerText的用法 1.设置标签中的文本内容 2.获取标签中的文本内容 3.inne ...

  8. JavaScript之childNodes 和 children 区别

    1.先让我们来看看childNodes的用法,以及是如何计算节点数量: 为什么输出是7而不是3呢?原来Internet Explorer 会忽略节点之间生成的空白文本节点(比如换行字符),而 Mozi ...

  9. Javascript的childNodes和children

    有些时候你发现调用childNodes属于没有获得你期望的值.比如: html: <a href="javascript:void(0);" οnclick="se ...

最新文章

  1. 基于 TensorFlow 在手机端实现文档检测
  2. 谷歌浏览器安卓版_谷歌翻译(在线翻译)下载-谷歌翻译下载安装安卓版v5.12.0...
  3. torch bceloss nan
  4. TensorFlow patch块划分(transpose and reshape)
  5. Spark中RDD转换成DataFrame的两种方式(分别用Java和scala实现)
  6. mate30后续用鸿蒙系统,mate30可以升级鸿蒙不?升级后还能退回原系统吗?
  7. 链栈判断回文 java_C语言链栈判断回文
  8. dockerfile制作docker镜像
  9. ES6 里面的 Promise
  10. 人工智能工程化丨中小企业AI中台落地指南
  11. 浅谈估值模型:PE指标II——PE Band
  12. aspen稳态导出动态_Aspen Dynamic 针对精馏塔的模拟设计过程详解 | APP技术稿第1期...
  13. 奥特曼系列ot中怎么选择服务器,《奥特曼系列OL》新手攻略(另外一篇)
  14. 给服务器安装debian系统,安装Debian 10 Buster的方法
  15. 笔记本修改无线网卡MAC地址
  16. opencv利用投影法进行水平切割和垂直切割
  17. 【代码审计】iCMS_v7.0.7 keywords.admincp.php页面存在SQL注入漏洞分析
  18. linux系统时间获取方式
  19. 河南科技大计算机专业录取分数线,河南科技大学历年各专业录取分数一览表
  20. Python arcpy检查矢量自相交

热门文章

  1. [微信小程序]聊天对话(文本,图片)的功能(完整代码附效果图)
  2. PHP接口允许ajax跨域访问设置方法
  3. 机器学习笔记-人工神经网络(artificial neural networks)
  4. 机器学习算法--欧几里得距离、余弦距离和曼哈顿距离的计算
  5. 纵横交错的学问——Power Plan
  6. 液晶面板里面有些什么配件_LED面板灯由哪些部件组成
  7. 创新性应用-使用脚本加速DB2存储过程的开发-常红平
  8. 互联网医院网络安全等保建设方案(附PPT全文)
  9. 基于Struts开发电影订票网站
  10. GDOI2018事故记录