一、

<div><p>123</p>
</div>

在上面这段代码中,如果使用以下js代码

var oDiv=document.getElementByTagName("div")[0];
alert(oDiv.firstChild.nodeName)

在ie9以下,alert出来的是p(p标签名字),但是在现代浏览器下,比如Chrome,FF,ie11等等,由于会把<div>   <p>两个标签之间的空白节点也解析出来,所以会alert出#text(由于空白节点是属于text文本节点)

如果把html的Demo改成如下,则无论在古老浏览器还是现代浏览器中得到的结果都是一样

<div><p>123</p></div>

由于没有了div与p标签之间的空白,所以执行上面js代码时无论在ie678还是现代浏览器中都输出p标签

二、

在平时写js中,我们经常会想用一个方法直接获取到父元素的第一个子元素节点,就好比如上面的例子中,使用firstChild确实可以实现这一功能

<div><p>123</p></div>
var first=document.getElementByTagName("div")[0].firstChild

这样我们就可以获取到第一个元素子节点,但是当div与p之间存在空白节点的话,first就会获取到空白节点而不是第一个元素节点。

所以,DOM扩展了一个firstElementChild方法,这个方法可以获取到父元素的第一个子元素节点

<div><p>123</p>
</div>
var first=document.getElementByTagName("div")[0].firstElementChild

即便div与p标签中存在空白节点,但是使用firstElementChild方法仍然可以正常的获取到div的第一个子元素节点p。

但是问题又来了,firstElementChild这个方法在现代浏览器中兼容,但是在ie678中却没有这个方法,一旦在ie678中使用这个方法就会出错。

三、

虽然firstElementChild方法在ie678中不兼容,但是还有一个方法,便是Children方法。

经测试children方法在所有主流浏览器中都兼容,包括ie678,并且它也能实现firstElementChild的功能

<div><p>123</p>
</div>
var first=document.getElementByTagName("div")[0].children[0]

所以,以后写js的时候,如果想获取到子元素的element节点,最好使用children方法,childNodes方法以及firstChild方法在现代浏览器中使用,都会把元素标签中的空白节点检测出来,一般我们使用这两个方法都是为了获取到元素的元素节点,空白节点会给我们造成很多不必要的bug,而children方法则是只检测element元素节点,防范于未然,所以推荐大家以后使用children方法来替代childNodes。

转载自:http://www.cnblogs.com/jelly7723/p/4871849.html

js下firstElementChild以及firstChild,Children的用法相关推荐

  1. [转载] js 下获取子元素的方法 -- 李富生

    地址:https://www.cnblogs.com/web-fusheng/p/6816440.html firstElementChild只会获取元素节点对象,从名称就可以看出来,firstChi ...

  2. js 下获取子元素的方法

    笔记核心: firstElementChild只会获取元素节点对象,从名称就可以看出来,firstChild则可以获取文本节点对象(当然也可以获取元素节点对象),比如空格和换行都被当做文本节点. js ...

  3. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

    说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都在它的源码 ...

  4. 谈谈JS里的{ }大括号和[ ]中括号的用法

    为什么80%的码农都做不了架构师?>>>    谈谈JS里的{ }大括号和[ ]中括号的用法,理解后就可以看懂JSON结构了. 一.{ } 大括号,表示定义一个对象,大部分情况下要有 ...

  5. html鼠标键弹起事件,js鼠标按键事件和键盘按键事件用法实例汇总

    本文实例讲述了js鼠标按键事件和键盘按键事件用法.分享给大家供大家参考,具体如下: keydown,keyup,keypress:属于你的键盘按键 mousedown,mouseup:属于你的鼠标按键 ...

  6. dtree.js下拉树控件

    dtree下拉树的一些基础用法 id  Number  唯一的id pid  Number  判定父节点的数字,根节点的值为 -1 name  String  节点的文本标签 url  String ...

  7. 自适应分辨率可扩展二层JS下拉菜单

    1. S下拉菜单原理 下拉菜单实际上就是在开始的时候显示一级或者说是主菜单(图一).当触发条件(例如:鼠标移动到上面时)显示次级菜单(图二). 图一 图二 那么如何实现这样的效果呢.其实很简单.所有的 ...

  8. jquery.chosen.js下拉选择框美化插件项目实例

    由于之前使用的bootstrap-select插件是建立在bootstrap基础上的,实际使用到项目中的时候,与我们使用的ace-admin(基于bootstrap)存在样式冲突,导致下拉框的样式发生 ...

  9. linux为什么用tar压缩,linux下tar压缩和解压命令用法详解

    linux下tar压缩和解压命令用法详解 2017-03-25 14:06 分享人:老牛 将/usr/local/test目录下所有文件仅打包,不压缩到 /usr/local/auto_bak/目下 ...

最新文章

  1. BOM 浏览器对象模型和DOM 文档对象模型
  2. 电源上的sense什么意思_冷知识:电源开关上的这两个标识有什么含义?
  3. 敲代码就是一把梭_2020必看!开发五年的大佬日常工作中所使用的java代码技巧...
  4. Apache—DBUtils框架开发学习实例
  5. stop-hbase.sh一直处于等待状态
  6. oom 如何避免 高并发_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!...
  7. 音视频开发(14)---智能视频解决方案
  8. Nginx 配置学习
  9. open wrt 跟换主题_键盘还能这样玩,个性兼实用 达尔优归燕主题
  10. php7 fastdfs,关于centos7 fastdfs部署
  11. 百度云网盘批量复制文件,在线复制到每个文件夹中PC版
  12. 计算机应用研究参考文献格式,参考文献编写规则-计算机应用研究.PDF
  13. 网页web腾讯云webIM开发记录(一)
  14. 【文献调研】SLAM方向综述性论文
  15. 【lc3】汇编实现I/O中断
  16. JAVA面试题大全,收藏这一篇就够了
  17. 基于点线特征的激光雷达+单目视觉里程计
  18. 回顾6年深度学习算法实践和演进
  19. [HNOI2006]公路修建问题 ——二分答案+krukal(蒟弱个人总结)
  20. Java课设设计-机票预订管理系统

热门文章

  1. C# 动态 条件 组合_3D模型+平滑,在PPT中实现动态呈现
  2. 如何用ZBrush雕刻出栩栩如生的头发(一)
  3. Linux那点事儿——运维工程师百科书-持更
  4. html中用上级目录,html如何表示上级目录
  5. java用户头像保存_微信授权后获取用户头像保存到服务器
  6. 首选DNS服务器地址不显示,首选dns服务器如何设置?如何设置DNS地址
  7. 计算机专业春考难不难,春考很难录取吗
  8. 总有你值得一试的python开源项目
  9. 【基础篇】详解Zookeeper客户端Curator
  10. android软键盘弹出黑屏