博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
达文西,我要的是属性节点,不是属性!
阅读量:6815 次
发布时间:2019-06-26

本文共 1553 字,大约阅读时间需要 5 分钟。

js在处理DOM的时候,文档中的内容都会被当成一个个节点,也就是常说的node。节点的类型有很多,常用的主要是三种:元素节点、属性节点和文本节点。

元素相当于我们说的标签,属性就是标签中定义的属性,文本就是标签里面的文字。比如下面我们可以通过getElementById来获取元素节点,然后再通过childNodes遍历它的子节点。

hello

I am Jason.

2019-11-11

复制代码

打印的结果如下,所有的子节点中,节点类型里1是元素节点,3是文本节点,这里没有属性节点。

3,#text,        hello        1,P,null3,#text,        1,P,null3,#text,    复制代码

那怎么获取属性节点?上网一搜,有的文章说是通过getAttribute,还举例说了不同姿势的获取方式,还能赋值等等。那就试试吧。

var attr = document.getElementsByClassName("name")[0].getAttribute("title");console.log(typeof attr);console.log(attr);console.log(attr.nodeType + "," + attr.nodeName + "," + attr.nodeValue);复制代码

打印结果如下,获取到的getAttribute是一个string,不是一个object,当然也没法获取它的节点类型、名称或者值,它只是一个字符串格式的属性值而已。

stringI am Jasonundefined,undefined,undefined复制代码

属性节点的正确获取姿势是getAttributeNode。

var nodeAttr = document.getElementsByClassName("name")[0].getAttributeNode("title");console.log(typeof nodeAttr);console.log(nodeAttr.nodeType + "," + nodeAttr.nodeName + "," + nodeAttr.nodeValue);复制代码

结果如下:

object2,title,I am Jason复制代码

getAttribute和getAttributeNode,前者是获取某个属性值,后者才是获取属性节点。

除此之外,我们还知道,元素节点的类型是1,属性节点的类型是2,文本节点的类型是3,看这123的排序,就知道为什么它们仨是最常用的。

这里面顺便提一下,文本节点经常在我们计算childNodes的时候来捣乱,比如文章一开始的那段遍历childNodes的代码,结果里面有hello可以理解,但还有一些什么值都没有的文本节点,这是导致我们在计算子节点数量时经常有偏差的原因。

这个什么值都没有的文本节点,其实是有内容的,内容就是换行和空格。我们用下面这段代码来对比。

hello

I am Jason.

2019-11-11

复制代码

输出的结果就是我们正常理解的子节点内容。

3,#text,hello1,P,null1,P,null复制代码

上面我们说过123代表的是节点类型,那么节点名称呢?如果是元素节点,那么就是标签名称;如果是属性节点,那么就是属性名称;如果是文本节点呢?文本没有什么名称只有值,所以它统一叫#text。

关于节点值呢?元素节点是没有值的,输出null。其他的两类节点都能输出相应的值。

转载地址:http://niczl.baihongyu.com/

你可能感兴趣的文章
命名实体识别
查看>>
动态切换的动态代理
查看>>
电商项目(下)
查看>>
vue 数字滚动递增效果
查看>>
vue2.0中父子,兄弟组件的传值2
查看>>
Spring Boot注解常用!!!看了就可以开发大量项目了
查看>>
音频编码 Audio Converter
查看>>
SQL - case when then else end 的用法
查看>>
web优化是http缓存(上)
查看>>
19-01-14
查看>>
媒体融合三部曲(未完待续...)
查看>>
OkHttp3-拦截器(Interceptor)
查看>>
Bootstrap在实际生产开发中的使用心得
查看>>
Google推出实时内容洞察工具 为用户提供表现最好的内容
查看>>
虚拟机故障与故障处理工具之指令篇
查看>>
iOS 基础知识学习目录索引
查看>>
My_Base_notes
查看>>
Node assert断言学习及mocha框架与travisCI初探
查看>>
大话转岗 PHP 开发小结
查看>>
React的状态管理
查看>>