childNodes详解

定义和用法

childNodes 属性返回节点的子节点集合,以 NodeList 对象。

提示:您可以使用 length 属性来确定子节点的数量,然后您就能够遍历所有的子节点并提取您需要的信息。

浏览器支持

所有主流浏览器都支持 childNodes 属性。

语法

element.childNodes

技术细节

返回值: NodeList 对象,表示节点集合。
DOM 版本 Core Level 1

以上是定义来着w3cschool.com

DOM中节点的类型

DOM中一共有12中类型。但是我们常用的只有几种。

首先我们了解下DOM中一般常见的节点类型有哪些?

1、元素节点

DOM中的原子都是元素节点,比如<body><table><div>等等。

如果把Web上的文档比作一座大厦,则元素就是构成这块大厦的砖石。一个文档是由N个元素组成的。元素可包含其他元素。

2、文本节点

任意的文字、空格、换行、空白行都算是文本节点。

3、属性节点

属性节点,故名思议就是其他节点的属性。例如所有的元素都有title属性,在title=‘title1‘就是一个属性节点。

4、注释节点

就是注释了。

childNodes包含了哪些节点?

由childNodes属性返回的数组中包含着所有类型的节点,所有的属性节点和文本节点也包含在其中。(这一点存在疑问,下面有解释)

事实上,文档里几乎每一样东西都是一个节点,甚至连空格和换行符都会被解释成节点。而且都包含在childNodes属性所返回的数组中。

chidNoeds返回的事node的集合,

每个node都包含有nodeType属性。

nodeType取值:

元素节点:1

属性节点:2

文本节点:3

注释节点:8

测试

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script>
        window.onload = function () {
            console.log("body的childNodes");
            var oItems = document.body.childNodes;
            for (var i = 0; i < oItems.length; i++) {
                console.log("nodeType:" + oItems[i].nodeType);
                console.log("nodeName:" + oItems[i].nodeName);
                console.log("nodeValue:‘" + oItems[i].nodeValue + "‘");
            }
            console.log("h1的childNodes");
            getChildNodesAtrr(document.getElementsByTagName("h1")[0]);
            console.log("span的childNodes");
            getChildNodesAtrr(document.getElementsByTagName("span")[0]);
            console.log("div的childNodes");
            getChildNodesAtrr(document.getElementsByTagName("div")[0]);
        };

        function getChildNodesAtrr(dom) {
            var oItems = dom.childNodes;
            for (var i = 0; i < oItems.length; i++) {
                console.log("nodeType:" + oItems[i].nodeType);
                console.log("nodeName:" + oItems[i].nodeName);
                console.log("nodeValue:‘" + oItems[i].nodeValue + "‘");
            }
        }
    </script>
</head>
<body>
    <h1>h1</h1>
    <span>span</span>
    <!--这是一个注释-->
    123
    <div class="class1" title="title1"></div>
</body>
</html>

最终控制台的输出结果:

body的childNodes
nodeType:3
nodeName:#text
nodeValue:‘

nodeType:1
nodeName:H1
nodeValue:‘null‘
nodeType:3
nodeName:#text
nodeValue:‘

nodeType:1
nodeName:SPAN
nodeValue:‘null‘
nodeType:3
nodeName:#text
nodeValue:‘

nodeType:8
nodeName:#comment
nodeValue:‘这是一个注释‘
nodeType:3
nodeName:#text
nodeValue:‘
123

nodeType:1
nodeName:DIV
nodeValue:‘null‘
nodeType:3
nodeName:#text
nodeValue:‘


h1的childNodes
nodeType:3
nodeName:#text
nodeValue:‘h1‘
span的childNodes
nodeType:3
nodeName:#text
nodeValue:‘span‘
div的childNodes

结果分析

1、分析结果,其中可以发现

nodeValue:‘
123

这个其实是nodeValue:\n123\n,加引号只是为了能看出换行效果。

这说明空格和换行符确实被当成一个文本接单

2、元素包含文字时,元素节点本身的nodevalue是null,而它包含的文字成为了一个独立的文本节点,这个文本节点的nodeValue才是我们之前设置的值。上例中的H1和SPAN都是这样的,childNodes的长度为1。而div因为没有内容所以div的childNodes的长度为0。

3、没有发现有nodeType为2的节点类型

总结

在适用原生的childNodes时,包括提供的nodeValue,firstChild(),lastChild()等等。都需要注意其他元素类型的影响,因为我们通常操作的都是元素节点。而childNodes返回的集合中包含了很多意向不到的东西,在实际适用中和容易照成错误。

所以建议在适用childNodes时,最好通过nodeType将返回集合过滤一遍再进行使用,能够避免很多不必要的问题。

疑问

实际测试发现并没有发现有nodeType为2的node。不知道是和原因?希望有知道的大神告知。

以上哪有写的不对的地方欢迎指正学习。^3^

欢迎转载

转载注明原创地址:http://www.cnblogs.com/Jersen/p/4908943.html

时间: 2024-11-07 04:12:27

childNodes详解的相关文章

可以自动切换的tab选项卡实现过程详解

可以自动切换的tab选项卡实现过程详解:关于选项卡大家一定不会陌生,应用非常的频繁,通常选项卡都是需要点击或者划过才能够实现切换.本章节分享一个能够实现自动切换的选项卡功能,并给出它的具体实现过程.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.so

XPath 详解,总结

XPath简介 XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.目前有XPath1.0和XPath2.0两个版本.其中Xpath1.0是1999年成为W3C标准,而XPath2.0标准的确立是在2007年.W3C关于XPath的英文详细文档请见:http://www.w3.org/TR/xpath20/ . XPath是一种表达式语言,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等.XPath2.0是XPath1.0的超

开胃小菜——impress.js代码详解

README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看impress.js并没有遇到太大的阻碍,读代码用了一个小时,写这篇文章用了近三个小时,果然写文章比读代码费劲多了. 个人感觉impress.js的代码量(算上注释一共不到1000行)和难度(没有jQuery的各种black magic= =)都非常适合新手学习,所以写一个总结,帮助大家理解源码. 考

笔记-[1]-DOM的节点操作详解.

DOM:文档对象模型 操作DOM基本就是操作DOM的元素节点. 节点的属性: 1:objElement.childNodes  :获取该元素对象的的节点集合,有length长度属性,在标准浏览器下使用,会辩认文本节点的节点,一般不用,有其他的更好的属性(children) 2:objElement.children :     获取该元素对象的的节点集合,有length长度属性,在ie8下和其他标准浏览器兼容,只获取元素节点. 3:obj.nodeType   :获取对象的节点类型,1为元素节点

vue.js基础知识篇(6):组件详解

第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 Vue.js的组件注册分为全局注册和局部注册. 全局注册使用Vue.component方法.第一个参数是组件名字,第二个参数是组件的构造函数,要么是function,要么是object. <!DOCTYPE html> <html lang="en"> <hea

DOM4J介绍与代码示例(2)-XPath 详解

XPath 详解,总结 XPath简介 XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.目前有XPath1.0和 XPath2.0两个版本.其中Xpath1.0是1999年成为W3C标准,而XPath2.0标准的确立是在2007年.W3C关于XPath的英文 详细文档请见:http://www.w3.org/TR/xpath20/ . XPath是一种表达式语言,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等.XPath

dom对象详解--document对象

 document对象 Document对象代表整个html文档,可用来访问页面中的所有元素,是最复杂的一个dom对象,可以说是学习好dom编程的关键所在. Document对象是window对象的一个成员属性,通过window.document来访问,当然也可以直接使用document. document对象常用的函数和属性可参考http://www.w3school.com.cn/jsref/dom_obj_document.asp. getElementById() 返回对拥有指定 ID

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h