LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

js DOM 节点查找常用方法

freeflydom
2025年7月4日 9:59 本文热度 96

虽然目前的开发场景基本都是使用 React/Vue/Angular 等框架,但是对于一些基础的 DOM 操作,还是需要了解学习。

曾经我们讨论过这样一个问题:Vue 这些开发框架,用它们渲染页面,真的就比不用开发框架快吗?

其实这个问题很好回答的,开发框架只是优化了项目的开发效率,对于浏览器的渲染速度,其实并没有想象中的那么快。

目前的前后端分离的开发模式,大致分为两种:一是浏览器端运行 Vue 等单页应用框架,由前端发起接口请求渲染页面从而实现前后端分离;二是在服务端运行 node.js ,由 node.js 发起接口请求渲染页面,从而实现前后端分离。这两种开发模式都绕不开的一个问题是:都要请求一次接口,http 通信都是很耗时的,相比于古老的后端渲染来说,其实已经算很慢了。

那么就有一个问题:为何 node.js 不直接写 SQL 查询数据库?嘿。。这个问题嘛就涉及到方方面面了,比如全栈开发和前端开发的价格那可不一样,会 JS 的前端和会 SQL 的前端又不一样了,前端踩过线去干后端的事这就矛盾来了...

废话太多了,咱们进入正题~~

DOM 查询

DOM 查询就是要找到 HTML 中的某个节点,方便对这个节点干一些不可描述的事~~

比如说给这个 HTML 元素加点小料,给 HTML 元素换个皮肤,让 HTML 元素动起来啥的。要干这些事的前提是要找对 HTML 元素,找错了就乱套了~~

/* 
通过 ID 选择
查找页面上 id="header" 的第一个元素
比如:
<div id="header"></div>
<section id="header"></section>
<header id="header"></header>
只要是 ID  为 header 的元素,都能选择,但是只会找第一个
*/
const header = document.getElementById("header");
/*
通过类名选择(返回动态集合)
查找页面上 class="btn" 的所有元素
比如:
<button class="btn"></button>
<a class="btn"></a>
<div class="btn"></div>
*/
const buttons = document.getElementsByClassName("btn"); 
/*
通过标签名选择
与 getElementsByClassName 类似,只是选择页面上所有的 img 元素
*/
const images = document.getElementsByTagName("img");
/*
通过 CSS 选择器(静态集合)
此方法可以使用 CSS 选择器来获取页面上的元素
比如可以使用 .item:nth-child(3) 选择页面上 class="item" 的第三个元素
*/
const firstButton = document.querySelector(".btn:first-child");
const allButtons = document.querySelectorAll(".btn");

动态集合 vs 静态集合

顾名思义,动态集合就是会根据 HTML 内容变化而变化,而静态集合就是不管 HTML 怎么变,都是选择器方法执行的那一瞬间就确定了他的样子。

<ul class="list">
  <li class="item">1</li>
  <li class="item">2</li>
  <li class="item">3</li>
  <li class="item">4</li>
  <li class="item">5</li>
</ul>
<script>
  const item1 = document.querySelectorAll('.item')
  const item2 = document.getElementsByClassName('item')
  // 创建一个新的 li 元素
  const li = document.createElement('li')
  li.classList.add('item')
  // list 元素中新增一个 li 元素
  document.querySelector('.list').appendChild(li)
  console.log('🚀 ~ item2:', item1); // NodeList(5)
  console.log('🚀 ~ item:', item2); // HTMLCollection(6)
</script>

节点关系

除了直接查找节点的方法外,还能通过获取到的节点关系属性,取到相对于的节点,比如:

parentNode 用于选择父节点。
childNodes 用于选择所有子节点,包括所有的子内容(比如:注释、空格、文本内容等)。
children 仅选择元素节点内容。

firstChild 选择第一个子内容,可以是注释、文本内容、换行符等。
lastChild 选择最后一个子内容,可以是注释、文本内容、换行符等。
firstElementChild 选择第一个元素节点。
lastElementChild 选择最后一个元素节点。

nextSibling 选择当前节点后一个内容,可以是注释、文本内容、换行符等。
previousSibling 选择当前节点前一个内容,可以是注释、文本内容、换行符等。
nextElementSibling 选择当前节点后一个元素节点。
previousElementSibling 选择当前节点前一个元素节点。

<ul class="list">1122
  <!-- 注释 -->
  <li class="item">1</li>
  <li class="item">2</li>
  321<li class="item">3</li>123
  <li class="item">4</li>
  <li class="item">5</li>
</ul>
<script>
  const parentNode = document.querySelector('.item:nth-child(3)').parentNode
  console.log('🚀 ~ parentNode:', parentNode); // 获得 ul.list 
  const childNodes = document.querySelector('.list').childNodes
  console.log('🚀 ~ childNodes:', childNodes); // 获得所有的子内容 [text, comment, text, li.item, text, li.item, text, li.item, text, li.item, text, li.item, text]
  const children = document.querySelector('.list').children
  console.log('🚀 ~ children:', children); // 获取所有的 .item 元素 [li.item, li.item, li.item, li.item, li.item]
  const firstChild = document.querySelector('.list').firstChild
  console.log('🚀 ~ firstChild:', firstChild); // 获得文本 11122
  const lastChild = document.querySelector('.list').lastChild
  console.log('🚀 ~ lastChild:', lastChild); // 获得最后的换行符 \n
  const firstElementChild = document.querySelector('.list').firstElementChild
  console.log('🚀 ~ firstElementChild:', firstElementChild); // 获得第一个 li.item
  const lastElementChild = document.querySelector('.list').lastElementChild
  console.log('🚀 ~ lastElementChild:', lastElementChild); // 获最后一个 li.item
  const nextSibling = document.querySelector('.item:nth-child(3)').nextSibling
  console.log('🚀 ~ nextSibling:', nextSibling); // 获得文本 123
  const previousSibling = document.querySelector('.item:nth-child(3)').previousSibling
  console.log('🚀 ~ previousSibling:', previousSibling); // 获得文本 321
  const nextElementSibling = document.querySelector('.item:nth-child(3)').nextElementSibling
  console.log('🚀 ~ nextElementSibling:', nextElementSibling); // 获得第四个 li.item
  const previousElementSibling = document.querySelector('.item:nth-child(3)').previousElementSibling
  console.log('🚀 ~ previousElementSibling:', previousElementSibling); // 获得第二个 li.item
</script>

转自https://www.cnblogs.com/linx/p/18947426


该文章在 2025/7/4 9:59:00 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved