chidNodes返回的是node的集合,

每个node都包含有nodeType属性。

nodeType取值:

元素节点:1

属性节点:2

文本节点:3

注释节点:8
 
 
页面上是由无数个节点组成,节点分成元素节点、属性节点、文本节点、注释节点
<table>
     <tr>
          <td>aaa</td>
          <td>bbb</td>
     </tr>
</table>
table与tr、tr与td、td与td之间的换行都属于文本节点,如果获取table的chidNodes,将会获得9个节点,但事实上我们并不希望得到那些换行的空文本节点,td内的aaa仍然是td下的文本节点,要想获得td内的aaa,则需要通过td.chidNodes去获取,解决方法和示例如下:
 <html>
<head>
<title></title>
<script src="../js/jquery-1.12.3.min.js"></script>
</head>
<body>
<table>
<tr>
<td>值1</td>
<td>值2</td>
<td>值3</td>
</tr>
<tr class="for-tr">
<td>aaa</td>
<td>bbb</td>
<td>ccc</td>
</tr>
<tr class="for-tr">
<td>ddd</td>
<td>eee</td>
<td>fff</td>
</tr>
<tr class="for-tr">
<td>ggg</td>
<td>hhh</td>
<td>kkk</td>
</tr>
<tr class="for-tr">
<td>lll</td>
<td>ppp</td>
<td>ooo</td>
</tr>
</table>
</body>
<script type="text/javascript">
var postArr = [];
for (var i = 0; i < document.getElementsByClassName('for-tr').length; i++) {//循环所有的tr
var subObj = {};
console.log(document.getElementsByClassName('for-tr')[i].childNodes);
// var subChild = delSpaceDom(document.getElementsByClassName('for-tr')[i]);
// subObj.name = subChild[0].childNodes[0].nodeValue;
// subObj.age = subChild[1].childNodes[0].nodeValue;
// subObj.sex = subChild[2].childNodes[0].nodeValue;
postArr.push(subObj);
};
console.log(postArr);
</script>
</html>

没有过滤掉空文本节点之前

打印出每个for-tr下的子元素节点,有七个节点,如图:

移除空文本节点之后的代码如下:

<html>
<head>
<title></title>
</head>
<body>
<table>
<tr>
<td>值1</td>
<td>值2</td>
<td>值3</td>
</tr>
<tr class="for-tr">
<td>aaa</td>
<td>bbb</td>
<td>ccc</td>
</tr>
<tr class="for-tr">
<td>ddd</td>
<td>eee</td>
<td>fff</td>
</tr>
<tr class="for-tr">
<td>ggg</td>
<td>hhh</td>
<td>kkk</td>
</tr>
<tr class="for-tr">
<td>lll</td>
<td>ppp</td>
<td>ooo</td>
</tr>
</table>
</body>
<script type="text/javascript">
var postArr = [];
for (var i = 0; i < document.getElementsByClassName('for-tr').length; i++) {//循环所有的tr
var subObj = {};
var subChild = delSpaceDom(document.getElementsByClassName('for-tr')[i]);
subObj.name = subChild[0].childNodes[0].nodeValue;
subObj.age = subChild[1].childNodes[0].nodeValue;
subObj.sex = subChild[2].childNodes[0].nodeValue;
postArr.push(subObj);
};
console.log(postArr);
function delSpaceDom(parentNode) {
var sub_child = parentNode.childNodes;
for (var i = 0; i < sub_child.length; i++) {
if(sub_child[i].nodeType == '3' && sub_child[i].nodeName == '#text' && !/\S/.test(sub_child[i].nodeValue)){//文本节点并且是空的文本节点时,将空文本节点删除
parentNode.removeChild(sub_child[i]);
}
}
return parentNode.childNodes;
}
</script>
</html>
运行结果如下:
总结:
页面上是由无数个节点组成,而childNodes是获取到所有的节点,要想得到自己想要的节点,需要经过处理。

javascript获取childNodes详情,删除空节点的更多相关文章

  1. javascript获取dom的下一个节点方法

    需求说明: 获取当前节点左节点或者右节点(兄弟节点): css: <style type="text/css"> a:focus { outline: none; } ...

  2. javascript 获取下一个节点

    下一个节点: nextElementSibling 上一个节点 previousElementSibling <div> <select onchange="alert(t ...

  3. JavaScript获取HTML DOM节点元素详解(转)

    在Web运用程序特别是Web 2.0程序开发中,经常要获取页面中某个元素,然后更新该元素的样式.内容等.如何获取要更新的元素,是首先要处理的疑问. 51CTO推荐阅读:JavaScript DOM文档 ...

  4. [转]Javascript removeChild()删除节点及删除子节点的方法(同样适用于jq)

    Javascript removeChild()删除节点及删除子节点的方法 这篇文章主要介绍了Javascript removeChild()删除节点及删除子节点的方法的相关资料,需要的朋友可以参考下 ...

  5. javascript 获取HTML DOM父、子、临近节点

    在Web应用程序特别是Web2.0程序开发中,经常要获取页面中某个元素,然后更新该元素的样式.内容等.如何获取要更新的元素,是首先要解决的问题.令人欣慰的是,使用JavaScript获取节点的方法有很 ...

  6. html5中JavaScript删除全部节点

    如果div里有这么些内容: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type ...

  7. javaScript获取文档中所有元素节点的个数

    HTML+JS 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  8. Zookeeper命令行操作(常用命令;客户端连接;查看znode路径;创建节点;获取znode数据,查看节点内容,设置节点内容,删除节点;监听znode事件;telnet连接zookeeper)

    8.1.常用命令 启动ZK服务 bin/zkServer.sh start 查看ZK服务状态 bin/zkServer.sh status 停止ZK服务 bin/zkServer.sh stop 重启 ...

  9. java:利用xpath删除xml中的空节点

    原始xml内容: <data> <a> </a> <b>b1</b> <awb> <awbpre>123</a ...

随机推荐

  1. PHP之readdir()函数

    最近在学习php文件操作的相关知识,记录一下readdir()函数其中的一个要注意的点 1. 在$temp=readdir($handle)函数中 readdir获取的是文件名和$handle中的文件 ...

  2. cacti 安装

    cacti:是常用的一个监控软件(开源,免费) 特点:重图形,有数据历史,需要用到数据库的支持,支持web配置,默认不支持告警,可以加插件 cacti安装 1.安装扩展源epel (nagios 和z ...

  3. @rpath/libswiftCore.dylib问题

    dyld: Library not loaded: @rpath/libswiftCore.dylib  Referenced from: /private/var/containers/Bundle ...

  4. 网页端打开手机上的app

    iOS/Android 浏览器(h5)及微信中唤起本地APP 在移动互联网,链接是比较重要的传播媒质,但很多时候我们又希望用户能够回到APP中,这就要求APP可以通过浏览器或在微信中被方便地唤起. 这 ...

  5. android Acitivity之间的几种传值方式(^_^)

    对于开发app 来说,数据的传递肯定是少不了的啦,其实app 的本质就是用来呈现数据的. 好的 方式一  Intent.putExtra(TAG,DATA); 应用场景   对于传送单一数据,而又只在 ...

  6. c语言学习笔记三

    第三章,函数 字符串函数 //strcmp int my_strcmp(char *str1,char *str2) {   while(*str1 = = *str2)   /*不可用while(* ...

  7. 【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处

    (转自:http://blog.csdn.net/reille/article/details/7161942) 作者:reille 本博客网址:http://blog.csdn.net/reille ...

  8. 51node1264(判断线段相交)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1264 题意:中文题诶- 思路:对于直线a1a2, b1b2, ...

  9. python enumerate用法

    含义:"枚举,列举" 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值 enumerate多 ...

  10. 【React】启动dva脚手架

    开始前: 确保node版本为6.5以上. // 安装脚手架 npm i dva-cli -g // 自动安装新工程 dva new newProjectName // 导入antd包 npm i an ...