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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PreparedStatement预编译的sql执行对象

一、预编译&#xff0c;防sql注入 其中&#xff0c;设置参数值占位符索引从1开始&#xff1b;在由sql 连接对象创建 sql执行对象时候传入参数sql语句&#xff0c;在执行对象在执行方法时候就不用再传入sql语句&#xff1b; 数据库索引一般是从1开始&#xff0c;java对象一般是从…

祝贺父亲节快乐的python代码_祝福父亲节快乐的句子50句

祝福父亲节快乐的句子50句祝福父亲节快乐的句子50句导语&#xff1a;他是一棵苍天大树&#xff0c;为我们遮风挡雨&#xff0c;呵护我们健康成长。下面励志故事网小编为大家整理了祝福父亲节快乐的句子&#xff0c;希望大家喜欢。1. 老爸老爸您最棒&#xff0c;身强体壮有力量。…

Linux下Vi/Vim的使用方法

本文介绍了vi (vim)的基本使用方法&#xff0c;但对于普通用户来说基本上够了&#xff01;i/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim 是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法…

JDBC管理事务

一、事务概念&#xff1a;打包一起的多个步骤的业务操作&#xff0c;要么同事成功&#xff0c;要么同时失败&#xff0c;则需要用事务管理&#xff1b; 二、代码实现 转载于:https://www.cnblogs.com/wmqiang/p/11600776.html

C++标准库简介

C标准库的所有头文件都没有扩展名。C标准库的内容总共在50个标准头文件中定义&#xff0c;其中18个提供了C库的功能。 <cname>形式的标准头文件【 <complex>例外】其内容与ISO标准C包含的name.h头文件相同&#xff0c;但容纳了C扩展的功能。在 <cname>形式标…

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite...

SQLite是一种转为嵌入式设备设计的轻型数据库&#xff0c;其只有五种数据类型&#xff0c;分别是&#xff1a; NULL&#xff1a; 空值 INTEGER&#xff1a; 整数 REAL&#xff1a; 浮点数 TEXT&#xff1a; 字符串 BLOB&#xff1a; 大数据 在SQLite中&#xff0c;并没有专门设…

netflix会员和非会员的区别_Netflix开放10部作品免费给非会员试看

DoNews 9月1日消息(记者 刘文轩)据TechCrunch消息&#xff0c;视频流媒体巨头Netflix向全球200多个国家的非付费用户免费开放10部影视作品&#xff0c;包括Netflix原创电影和电视节目。这些节目包括&#xff1a;《蒙上你的眼》(Bird Box)《宝贝老板&#xff1a;重围商界》(The …

根据企业信息化应用需求来分析工作流平台的选型

随着企业信息化建设的发展&#xff0c;选择一个能快速满足个性化需求并灵活稳健的系统架构是企业信息化建设成功的基础&#xff0c;这已经成为一个不争的事实。工作流平台软件作为一个中间件产品&#xff0c;在企业信息系统架构中对于业务流程管理、快速开发及高效维护起着相当…

excel 某个单元格不是等于空值_这些稀奇古怪的符号,却是Excel高手们常玩的!...

Excel高手的世界&#xff0c;刚接触excel的同学们&#xff0c;真还不懂。高手们在编写excel函数公式&#xff0c;经常会玩大括号({})、双减号(--)、百分号(%)、连接空值(&"")等等稀奇古怪的符号&#xff0c;看得我们是一愣愣的。当然这些进阶的思路也是excel帮助…

C语言漫谈

C语言是被使用的最广泛的一种高级语言&#xff0c;其历史相当久远。而其发展也相当神速&#xff0c; 从当初的标准C发展到后来的C。其性能也发生了很多很大的变化。C语言拥有众多的编译器&#xff0c;其中不乏优秀者众多。从当初的Turbo C引入集成化编译环境后&#xff0c;C语言…

使用git如何批量对文件进行rm操作

git add -A 它会把我们未通过 git rm 删除的文件全部stage 转自&#xff1a; http://segmentfault.com/q/1010000000095373

Cookie会话技术

java web动态资源有Servlet和JSP&#xff1b; HTTP协议是无状态的&#xff0c;即每次请求响应和其他的互补相关&#xff0c;所以要共享数据&#xff0c;需要会话技术&#xff1b; 一、概念 二、Cookie会话技术 代码写在服务器端&#xff0c;设置Cookie和发送Cookie以及接收Cook…

黑马程序员——生成html静态页面,方便seo,加快加载速度

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流&#xff01; ---------------------- 这几日&#xff0c;同学问我怎样将动态页面直接生车静态的html页面&#xff0c;我想了想以前做过这个&#xff0c;今天把方法做个总结。 我所知道的生成静态页面的…

all any 或 此运算符后面必须跟_好好跟大家聊聊,最全面的 Python 重点

来源&#xff1a;二十一 链接&#xff1a;https://segmentfault.com/a/1190000018737045由于总结了太多的东西&#xff0c;所以篇幅有点长&#xff0c;这也是我"缝缝补补"总结了好久的东西。Py2 VS Py3print成为了函数&#xff0c;python2是关键字不再有unicode对…

myeclipse2014删除antlr-2.7.2.jar--解决struts和hibernate包冲突

方式一&#xff1a; 要求眼疾手快&#xff0c;在workspace下的D:\myeclipse2014workspace\.metadata\.me_tcat7\webapps\工程名\WEB-INF\lib中将antlr-2.7.2.jar删除。此法&#xff0c;每次启动都会讲jar包有增加进去&#xff0c;在程序刚将antlr-2.7.2.jar添加进来的时候立刻删…

javascript读写本机文本文件

近日在工作中遇到了一个情况&#xff1a;一张纯html的网页&#xff0c;用它一条一条输入数据&#xff0c;然后由JS运算出结果&#xff08;这些数据多半都是临时的&#xff0c;所以也没考虑保存到数据库&#xff09;&#xff0c;每次用完后换台电脑或出去搞活动现场演示时&#…

Android高效开发:

Android高效开发&#xff1a; 原则&#xff1a;1.不要做不必要的事情&#xff0c;2尽可能节省内存使用 尽可能避免创建对象使用自身的方法&#xff0c;如string.indexOf(),String.lastIndexOf(),乘虚自身的方法 使用虚拟优于使用接口。在嵌入式开发中&#xff0c;通过接口引用来…

主板模式的两项通用性接口

主板模式的两项<通用性>接口by 高煥堂典型的主板模式(Motherboard pattern)提供了两个通用性接口&#xff0c;也就是&#xff1a;CI和<I>接口。如下图&#xff1a;(图-1) 这两个接口的典型关系&#xff0c;就如下图&#xff1a; (图-2) 这个CI接口的exe…

eeprom的wp 引脚_EEPROM存储芯片24C02

1、24C02简介24C02是一个2Kbit的串行EEPROM存储芯片&#xff0c;可存储256个字节数据。工作电压范围为1.8V到6.0V&#xff0c;具有低功耗CMOS技术&#xff0c;自定时擦写周期&#xff0c;1000000次编程/擦除周期&#xff0c;可保存数据100年。24C02有一个16字节的页写缓冲器和一…

ASP实现数据库事务处理的方法

在开发Web应用时&#xff0c;无一例外地需要访问数据库&#xff0c;以完成对数据的查询、插入、更新、删除等操作。受应用逻辑的影响&#xff0c;有时需要将多条数据库操作指令组成一个工作单元&#xff08;事务&#xff09;。在数据库中&#xff0c;所谓事务是指一组逻辑操作单…