11node.md
goer ... 2022-01-05 大约 2 分钟
[toc]
# 节点关系
先前获取节点是说过
# 1. 节点
html元素
<a href=":///baidu.com">百度一下</a>
- 元素节点 标签名
a
- 文本节点 元素内 容
百度一下
- 属性节点 元素属性
href=":///baidu.com"
每个节点都有对应的信息
- nodeName 节点名称
- nodeType 节点类型
- nodeValue 节点的值
<div id="one" abc="abcv"> woshi </div>
// 元素节点
one.nodeName; //DIV
one.nodeType; //1
one.nodeValue; //null
//属性节点
//首先要获取指定属性 **attributes**
var e = one.attributes.abc; //获取abc属性
e.nodeName; //abc
e.nodeType; //2
e.nodeValue; //abcv //获取到属性值
//文本节点 **firstChild**
one.firstChild.nodeName; //#text
one.firstChild.nodeType; //3
one.firstChild.nodeValue; // 文本 woshi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
这3个很重要
- 获取属性的值
getAttribute()
<a id="one" abc="123">111</a>
var val = one.getAttribute('abc') //获取到abc属性的值
console.log(val) // 123;
1
2
3
4
2
3
4
- 设置属性的值
setAttribute()
***
<a id="one" abc="123">111</a>
one.setAttribute('two','456') //设置新的属性和值
one.setAttribute('abc','000') //修改已有的属性的值
//<a id="one" abc="000" two="456">111</a>
1
2
3
4
5
2
3
4
5
- 设置class名
className
***
<a id="one" abc="123">111</a>
one.className = 'aaa'; //设置一个class=“aaa"
//如果要加多个class名,拼接的方法
one.className =one.className+" bb" // 空格+class
// <a id="one" abc="123" class="aaa bb">111</a>
1
2
3
4
5
6
7
2
3
4
5
6
7
# 2.节点之间的关系
节点间存在 **父、子、兄弟 **关系
- 子节点
childNodes
// 获取所有子节点
<ul id="laoba">
<li>大牛</li>
<li>二牛</li>
<li>三牛</li>
<li>四牛</li>
<li id="ming">小明</li>
<li>小牛牛</li>
</ul>
var sou = laoba.childNodes; //包含所有子节点,空格也算 // 7+6(li) =13
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
清除空白节点的函数
function cleanWhitespace(element){
for(var i=0; i < element.childNodes.length; i++){
var node = element.childNodes[i];
//判断是否是空白节点,如果是则删除该节点
if(node.nodeType == 3 && !/\S/.test(node.nodeValue)){
node.parentNode.removeChild(node);
}
}
}
// 删除空白节点
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 获取父节点
parentNode
var parent = ming.parentNode; //获取到整个ul
// html的父节点 是 #document
1
2
2
- 兄弟节点---弟弟节点
nextSibling
var didi = ming.nextSibling.nextSibling; //也会获取到上面所说的空白,所有加两个
1
- 兄弟节点---哥哥节点
previousSibling
var gege = ming.previousSibling.previousSibling; //也会获取到上面所说的空白,所有加两个
1