首页 > 编程语言 >Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法

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

时间:2022-11-07 20:35:48浏览次数:37  
标签:document 23 DOM 文本 var 基本操作 div strong 节点

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

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

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


遍历节点树

节点的类型

上图看的是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基本操作 - 遍历节点树的方法_节点_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基本操作 - 遍历节点树的方法_节点_05

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

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

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

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

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

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

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

把HTML的结构改一下:

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

再问 div 里的子节点:

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

看下控制台:

Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法_节点_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基本操作 - 遍历节点树的方法_javascript_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基本操作 - 遍历节点树的方法_节点_12

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

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

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

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




标签:document,23,DOM,文本,var,基本操作,div,strong,节点
From: https://blog.51cto.com/ahuiok/5831319

相关文章

  • leetcode-2363-easy
    MergeSimilarItemsYouaregiventwo2Dintegerarrays,items1anditems2,representingtwosetsofitems.Eacharrayitemshasthefollowingproperties:ite......
  • 23 种设计模式C++实现
    设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:​​单例模式​​、​​原型模式​​、​​工厂方法模式​​、​​抽象工厂模式​​、​​建造者模式​​。结构......
  • 2023 年企业如何按下数字化转型加速键?
    2022也接近尾声,即将迎来2023年,疫情或将持续而无法终结,市场环境或许有点捉摸不透,企业数字化转型依旧迫在眉睫,但依旧得慎重再慎重,企业实现数字化转型在理解什么是数字化转型......
  • mongodb基本操作合集
    创建管理员账号useadmindb.createUser({user:"root",pwd:"xxxxxx",roles:[{role:"root",db:"admin"}]})其他库创建账号......
  • React源码中的dom-diff
    这一章就来讲讲React在协调阶段的beginWork里面主要做的事情--domdiff。本文主要讲的是React17.0.2版本的diff,在此我也画了一个简单的流程图:reconcileChildrendomd......
  • 深信服科技23届校园招聘
    技服岗位推荐:技术服务工程师:本科年薪22W+,硕士年薪25W+(签约前即可确定工作地点)远程技术服务工程师:本科18W+/硕士21W+(湖南长沙)投递:PC端hr.sangfor.com /移动端:关注公众号【......
  • 23种设计模式之自定义Spring框架(五)
    7,自定义Spring框架7.1spring使用回顾自定义spring框架前,先回顾一下spring框架的使用,从而分析spring的核心,并对核心功能进行模拟。数据访问层。定义UserDao接口及其子......
  • 23种设计模式之设计模式介绍(一)
    1,设计模式概述1.1软件设计模式的产生背景"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境......
  • 023 通过链表学Rust之非安全方式实现链表1
    介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list链表定义我们重新定义链表如下:pubstructList<T>{......
  • react react-router-dom6 mobx6整理
    reactreact-router-domv6route/index.jsimportReact,{Suspense,lazy}from'react'importLayoutfrom'../views/Layout/index'constHome=lazy(()=>......