0
点赞
收藏
分享

微信扫一扫

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法

Javascript(笔记23) - DOM基本操作 - 遍历节点树

DOM的节点可以形成一个类型树的结构

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_节点


遍历节点树

节点的类型

上图看的是HTML的结构,主要指的是元素节点,但在DOM结构里,节点可不止元素节点:

元素节点    ---1

属性节点    ---2

文本节点    ---3

注释节点    ---8

document  ---9

DocumentFragment --- 11

咱这里主要讨论 元素节点和文本节点;


parentNode 

父节点 (最顶端的 parentNoe 为 #document)

<div>
<strong></strong>
<span></span>
<em></em>
</div>

上面个这个结构,我们取出 strong ; 

var strong = document.getElementsByTagName("strong")[0];

使用 parentNode 来找到它的父节点:

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_节点_02

DOM元素都有这个属性,所以可以一直 parentNode 找到最上层的节点:

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_javascript_03

可以看到, strong 的父节点是 div ,div 的父节点是 html,html的父节点是 document。

那 document 上面还有没有父节点?

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_javascript_04

返回 null ,就没有了。   document 就到头了。

一个元素只有一个父节点,那么一个元素有几个子节点呢?那就说不定了。


childNodes

子节点们,仅直系的子节点,孙子辈的可不能算;

来看个HTML结构,相当于<div>标签,孙子辈的 <span>标签可不能算;

<div>
<strong>
<span>123</span>
</strong>
<span></span>
<em></em>
</div>

JS里取一个这个DIV对象;

var div = document.getElementsByTagName("div")[0];

看一下 div 的 childNodes 子节点们:

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_javascript_05

不应该是3个么,怎么变7个,就是算上 <span>也不够了。

注意,每个标签之间的空格部分 “text” 也算做子节点,他们被称为 文本子节点。

上面提到的节点类型中,就包括这种文本子节点,虽然看不到文本,只是空格也算文本。

如果把结构都写在一行里面:

<div><strong><span>123</span></strong><span></span><em></em></div>

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_javascript_06

这样就把标签之间的文本子节点去掉了,但这样的结构不够友好,一般也不这么样用;

把HTML的结构改一下:

<div>
<!-- this is commet -->
<strong></strong>
<span></span>
</div>

再问 div 里的子节点:

var div = document.getElementsByTagName("div")[0];

看下控制台:

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_javascript_07

还是7个子节点:这次不一样的是多了一个 comment (注释节点),虽然不执行,但也算是节点;

HTML结构再改一下:

<div>
这里有一段文本
<!-- this is commet -->
<strong></strong>
<span></span>
</div>

再问 div 有几个子节点:不用说,还是7个了。 因为第一个子节点是文本节点,之前只有空格,现在加上了文本而已,都算是1个文本节点。


firstChild

第一个子节点

<div>
<!-- this is commet -->
<strong></strong>
<span></span>
</div>

这个就字面意思,获取第一个子节点:

var div = document.getElementsByTagName("div")[0];

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_节点_08

lastChild

最后一个子节点

firshChild 类似,获取最后一个子节点:

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_节点_09

注意:虽然 firstChild lastChild 都是 text ,上面是第一个子节点,下面是最后一个字节点。

nextSibling previousSibling 这两个是取兄弟节点的,也可以一起讲了。 


nextSibling

后一个兄弟节点

<div>
<!-- this is commet -->
<strong></strong>
<span></span>
</div>

这次取 strong 也举例:

var strong = document.getElementsByTagName("strong")[0];

看控制台输出:

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_节点_10

如果继续往下 nextSibling 呢?

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_节点_11

span 元素节点后面还是个 text 节点,text节点后面就没有了,返回 null.

previousSibling

前一个兄弟节点

还用上面的 HTML结构,这次用 previousSibling:

var strong = document.getElementsByTagName("strong")[0];

向上取兄弟节点:

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_javascript_12

向上取兄弟节点,可以取到 comment 节点;

如果向上后再向下取呢?或者向下后再向上取呢?

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_节点_13

那很显然,就是 strong 它自己了。




举报

相关推荐

0 条评论