childNodes详解

childNodes详解定义和用法 childNodes 属性返回节点的子节点集合 以 NodeList 对象 提示 您可以使用 length 属性来确定子节点的数量 然后您就能够遍历所有的子节点并提取您需要的信息 浏览器支持所有主流浏览器都支持 childNodes 属性 语法 element childNodes 技术细节返回值 NodeList 对象

定义和用法

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

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

浏览器支持

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

语法

element.childNodes

技术细节

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

 

 

 

以上是定义来着w3cschool.com

DOM中节点的类型

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

1、元素节点

DOM中的原子都是元素节点,比如

等等。

如果把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:’
































































 

结果分析

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

转载于:https://www.cnblogs.com/Jersen/p/4908943.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207358.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午2:00
下一篇 2026年3月19日 下午2:01


相关推荐

  • JAVA一般项目开发流程

    JAVA一般项目开发流程一个 java 开发项目过程 1 项目启动 1 项目组成立 公司成员 客户成员 2 制定项目预期目标 3 制定项目计划周期 4 建立好项目组成员沟通机制 2 需求调研 1 创建调研计划 协调调研时间 2 收集客户资料 获取客户需求 所有的资料都需要保留一份 资料中存疑的需要及时询问 3 编写需求文档 重点描述出客户的业务流程和性能要求 采用 Word Excel Rose 等形式 4 需求变更记录

    2026年3月18日
    2
  • p6spy工具_p6软件优缺点

    p6spy工具_p6软件优缺点使用此工具在运行代码需要访问数据库的时候,可以在控制台看见sql语句一、导包二、导入配置文件三、修改database.properties中的driver和url一、导包链接:https://pan.baidu.com/s/1vIOKgjEeRQ9wFB2HUv6QAQ提取码:lclc二、导入配置文件#####%L#P6Spy#%%#Copyright(C)2013P6Spy#%%#LicensedundertheApacheLicense,Versio

    2022年10月5日
    6
  • Python基础语法知识点汇集「建议收藏」

    Python基础语法知识点汇集「建议收藏」本文小结了phython基础语法文章目录一.注释二.变量的类型三.标识符和关键字四.输出五.输入六.运算符七.数据类型转换一.注释<1>单行注释以#开头,#右边的所有文字当作说明,而不是真正要执行的程序,起辅助说明作用#我是注释,可以在里写一些功能说明之类的哦print(‘helloworld’)<2>多行注释”’我是多行注…

    2022年6月24日
    29
  • Android消息处理机制

    Google参考了Windows的消息处理机制,在Android系统中实现了一套类似的消息处理机制。学习Android的消息处理机制,有几个概念(类)必须了解:1.       Message消息,理解为线程间通讯的数据单元。例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程。2.       Message Queue消息队列,用来存放通

    2022年3月9日
    40
  • CSDN博客——“我的2014”年度征文活动火爆开启

    CSDN博客——“我的2014”年度征文活动火爆开启离2014的结束还有3天,一年终去,感触颇多:或是振奋,或是感动,或是美好……静下心来,我们一起来盘点这一年的工作和生活。这一年你是否

    2022年6月15日
    31
  • 获取android发布版sha1

    获取android发布版sha1一 使用 cmd 进入 jdk 安装目录 nbsp nbsp E cde jdk1 8 bin nbsp nbsp E jdk1 8 binkeytool exe list keystorexxxx nbsp nbsp xxxxx 表示你的 xxx keystore 文件路径

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号