有这样一个HTML结构

<div>
javascript
<p>javascript</p>
<div>jQuery</div>
<h5>PHP</h5>
</div>

使用JavaScript访问它的子节点

var children = document.getElementsByTagName('div')[0].childNodes;

children.length //

正如你看到的,children.length的结果不是4,而是7!为什么呢?

因为浏览器会把节点之间的空白符当作文本结点处理

<div>
javascript
<p>javascript</p> <!-- ←空白结点 -->
<div>jQuery</div> <!-- ←空白结点 -->
<h5>PHP</h5> <!-- ←空白结点 -->
</div>

4个可见结点 + 3个看不出来的空白结点 = 7个结点

这可以通过用JavaScript判断结点类型(元素的nodeType值为1,文本的nodeType值为3)的方式来进行验证

var children = document.getElementsByTagName('div')[0].childNodes;
for (var i = 0; i < children.length; i++) {
if (children[i].nodeType === 1) { // 如果是元素结点
document.write(children[i].innerText + '<br>');
} else if (children[i].nodeType === 3) { // 如果是文本结点
document.write(' "' + children[i].nodeValue +'"<br>');
}
}

页面输出的结果是这样的

" javascript "
javascript
" "
jQuery
" "
PHP
" "

(完)

使用JavaScript访问子节点方法elementNode.childNodes时,需要注意的地方的更多相关文章

  1. 访问子节点childNodes

    访问子节点childNodes 访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性. 语法: elementNode.childNodes 注意: 如果选定的节点 ...

  2. 局部内部类访问它所在方法的局部变量时,要求该局部变量必须声明为final的原因

    这是java的一条规则.那么为什么会有这条规则呢?要想弄懂这个问题,就需要弄懂局部内部类对象和局部变量的生命周期的谁更长的问题. 首先,看一段代码,以没有将变量声明为final的代码作为例子,代码如下 ...

  3. js子节点children和childnodes的用法(非原创)

    想要获取子节点的数量,有几种办法. childNodes 它会把空的文本节点当成节点, <ul> 文本节点 <li>元素节点</li> 文本节点 <li> ...

  4. js子节点children和childnodes的用法

    想要获取子节点的数量,有几种办法. childNodes 它会把空的文本节点当成节点, <ul> 文本节点 <li>元素节点</li> 文本节点 <li> ...

  5. c# winform结合数据库动态生成treeview的父节点和子节点方法和思路

    tb_food表的结构如图一: tb_foodtype表的结构如图二: //获取tb_foodtype表中的所有数据 private void InitDataTable() { SqlConnect ...

  6. iview2.0 父组件访问子组件 方法

    //从父组件中访问子组件 可以给子组件定义标识 通过ref="chead" 定义  通过父组件就可以访问了

  7. 关于html中利用jQuery选择子节点方法总结——待续

    好几次碰到类似的要求,每次用的都不一样,在之前的面试的时候就被问到,突然觉得虽然自己做过但是说不出头绪,只能回答什么parent(),next()等等.所以想整理一下. 1.需求一:同页面有两个表格, ...

  8. iframe访问子页面方法

    在Iframe中调用子页面的Js函数 调用IFRAME子页面的JS函数 说明:假设有2个页面,index.html和inner.html.其中index.html中有一个iframe,这个iframe ...

  9. javascript查找子节点时,html里的换行可能会被当成节点

    1.直接去HTML里找到该换行的地方去掉换行 2.写一个方法把元素类型为空格而且是文本都删除 function del_ff(elem){ var elem_child = elem.childNod ...

随机推荐

  1. oracle or语句的坑

    SELECT SUM(tjo.pay_amount) FROM tb_jf_order tjo,tb_jf_gateway_trade_log tjg WHERE tjo.order_id = tjg ...

  2. Vimium使用快捷键总结

    chrome 快捷键: ctrl+w 关闭当前标签  ctrl+t 新建标签 gg行首 shift+g 行尾 Vimium使用快捷键总结 j, <c-e> : Scroll down k, ...

  3. Quartz 入门详解

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  4. 使用Charles检测HTTPS网站的数据包

    1.下载Charles 下载地址:https://www.charlesproxy.com/download/ 2.安装Charles的证书 选择Help->SSL Proxying->I ...

  5. PostgreSQL function examples

    warehouse_db=# CREATE TABLE warehouse_tbl(warehouse_id INTEGER NOT NULL,warehouse_name TEXT NOT NULL ...

  6. PIXHAWK DIY LED扩展板

    板载的状态LED灯,因为各种灰机的外壳有可能会被挡住看不到状态.那么我们也是可以用arduino板子来扩展实现外置,其实就是用328P芯片来实现. 这程序支持WS2812B的全彩LED灯. 默认的信号 ...

  7. jee websocket搭建总结

    1.使用框架spring+springmvc+mybatis+jdk7+tomcat7+maven 2.基本原理: a. WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通 ...

  8. ssh+expect批量分发

    Expect安装 [root@web02 scripts]# yum install expect SSH密钥生成 [root@web02 scripts]# ssh-keygen -t dsa   ...

  9. C# MVC jsonp初接触成功

    利用jsonp进行跨域请求资源 C# MVC ApiControllers准备如下: 1.需要在引用处右键管理NuGet安装jsonp插件 2.在Application_Start()中配置 Glob ...

  10. 桌面显卡天梯图和桌面cpu天梯图

    桌面cpu天梯图: 桌面显卡天梯图: