Dom 基本操作 - 节点操作


theme: smartblue

一、 节点概述

网页中的所有内容都是节点(标签、属性、文本、注释等),在DOM中,节点使用node 来表示。

HTML DOM 树中的所有节点均可通过JavaScript进行访问,所有HTML元素(节点)均可被修改,也可以创建或删除。

2024-07-17_00-16-32.png

一般地,节点至少拥有 nodeType(节点类型)、nodeName(节点名称) 和 nodeValue(节点值) 这三个基本属性。

  • 元素节点 nodeType 为1
  • 属性节点 nodeType 为2
  • 文本节点 nodeType 为3(文本节点包含文字、空格、换行等)

我们在实际开发中,节点操作主要操作的是元素节点

二、节点操作

2.1 节点层级

利用 DOM 树可以把节点划分为不同的层级关系,常见的是父子兄层级关系

2.2 父节点

```

<script>
 var son = document.querySelector('.son')
 // 获取父节点 - 得到的是离元素最近的父节点
 // 如果找不到父节点,就返回null
 console.log(son.parentNode)

</script>

```

2.3 子节点

parentNode.childNodes 返回包含指定节点的子节点的集合,该集合为及时更新的集合

```

  • 1
  • 2
  • 3
  • 4
  • 5
<script>
 var ul = document.querySelector('ul')
// 1. 包含子节点中所有的 文本,元素节点 等等
 console.log(ul.childNodes)

  // 若只想获取里面的元素节点,需要专门处理
  for(var i=0;i<ul.childNodes.length;i++){
    if(ul.childNodes[i].nodeType==1){
      // 元素节点
      console.log(ul.childNodes[i])
    }
  }

  // 2. 获取所有的子元素节点
  console.log(ul.children)

  // 3.1 获取第一个子节点, 不论是文本节点还是元素节点
  console.log(ul.firstChild)

  // 3.2 获取第一个子元素节点 - ie9 以上才支持
  console.log(ul.firstElementChild)

  // 3.3 获取最后一个子元素节点 - ie9 以上才支持
  console.log(ul.lastElementChild)

  // 3.4 若需要考虑兼容性问题
  console.log(ul.children[0])

</script>

```

2.4 兄弟节点

```

  • 1
  • 2
  • 3
  • 4
  • 5
<script>
 var li = document.querySelector('#third')

 // 返回当前元素的下一个兄弟节点, 同样获取的也是包含所有节点类型的
 console.log(li.nextSibling)

  // 返回上一个兄弟节点
  console.log(li.previousSibling)

  // 返回下一个兄弟元素节点 - ie9 以上才支持
  console.log(li.nextElementSibling)

  // 返回上一个兄弟元素节点 - ie9 以上才支持
  console.log(li.previousElementSibling)

</script>

```

2.5 创建节点

document.createElement('tagName') 方法创建中 tagName 指定的 HTM 元素。

因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点。

```

  • 1
  • 2
  • 3
  • 4
  • 5
<script>
// 创建元素节点
var li = document.createElement("li")

// 添加节点 - 将一个节点添加到指定父节点的子节点列表的末尾
var ul = document.querySelector('ul')
ul.appendChild(li)  

// 添加节点 - 将一个节点添加到父节点的指定子节点的前面
  var li2 = document.createElement("li")
  ul.insertBefore(li2,ul.children[2])

</script>

```

2.6 删除节点

```

  • 1
  • 2
  • 3
  • 4
  • 5
<script>
var ul = document.querySelector('ul')

// 删除元素
ul.removeChild(ul.children[2])

</script>

```

2.7 复制节点

```

  • 1
  • 2
  • 3
  • 4
  • 5
<script>
var ul = document.querySelector('ul')

// 克隆节点 - 若括号的参数为空或者false,则是浅拷贝
// 即只是复制标签而不复制内容
var clone = ul.children[3].cloneNode()
ul.appendChild(clone)

// true 为深拷贝,即复制标签也复制内容
var clone2 = ul.children[3].cloneNode(true)
ul.appendChild(clone2)
</script>

```

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值