0

0

JavaScript DOM操作:点击关联元素获取目标文本内容的教程

聖光之護

聖光之護

发布时间:2025-12-06 23:04:02

|

313人浏览过

|

来源于php中文网

原创

javascript dom操作:点击关联元素获取目标文本内容的教程

本教程详细介绍了如何通过JavaScript处理用户点击事件,并结合DOM的 closest() 和 querySelector() 方法,从复杂的HTML结构中准确获取目标元素的文本内容。文章强调了使用 addEventListener() 进行事件绑定、避免重复ID以及高效DOM遍历的最佳实践,帮助开发者在动态交互场景下精确操作DOM。

在Web开发中,我们经常需要实现这样的交互:用户点击页面上的某个元素(如一个图标或按钮),然后程序需要根据这个点击事件,获取或操作页面中与被点击元素相关联的另一个元素的文本或属性。例如,在一个列表项中,点击一个“编辑”图标,然后获取该列表项中某个标题的文本内容。本教程将指导您如何利用JavaScript和DOM API,以一种健壮且高效的方式实现这一常见需求。

场景分析与需求定义

假设我们有一个展示服务项的页面,每个服务项都包含一个可点击的编辑图标和一个标题链接。我们的目标是:当用户点击某个服务项的编辑图标时,能够准确地获取该服务项内部标题链接(<a>标签)的文本内容,并可进一步将其用于其他操作,例如填充到一个输入框中。

原始的HTML结构可能如下所示,其中包含了一些需要注意的细节:

立即学习Java免费学习笔记(深入)”;

<div class="swiper-slide">
    <i class="fa-regular fa-pen-to-square" id="update_pen" onclick="update_function()"></i>
    <div class="services-item mb-40 elementor-repeater-item-78d8e80" id="swiper-slide-one">
        <div class="services-item__content">
            <h4 class="services-item__tp-title mb-30">
                <a href="service-details.html">Hello</a>
            </h4>
            <div class="text_area_box" id="text_area_box">
                <input type="text" name="" required="">
                <label>Titre</label>
            </div>
        </div>
    </div>
</div>

在处理此类需求时,有几个关键的最佳实践和注意事项:

PathFinder
PathFinder

AI驱动的销售漏斗分析工具

下载
  1. id 属性的唯一性: HTML规范规定,id 属性在整个文档中必须是唯一的。如果上述服务项结构会在页面中重复出现(例如在一个列表中),那么像 update_pen, swiper-slide-one, text_area_box 这样的 id 属性就不应该被重复使用。在这种情况下,我们应该使用类(class)来标识这些元素。
  2. 事件绑定方式: onclick 属性直接嵌入HTML是一种较旧的事件绑定方式,不推荐在现代JavaScript开发中使用。它难以维护,且在复杂场景下功能受限。推荐使用 addEventListener() 方法进行事件绑定,它提供了更灵活的事件管理能力,并能更好地分离HTML结构与JavaScript行为。
  3. DOM遍历效率: 对于复杂或嵌套的DOM结构,直接使用 parentNode、nextSibling、firstChild 等属性进行链式遍历可能会变得冗长且易出错。更推荐使用 closest() 和 querySelector() 等方法,它们提供了更强大和简洁的DOM遍历能力。

优化HTML结构

为了遵循最佳实践并更好地支持多实例场景,我们首先对HTML结构进行优化。我们将移除重复的 id 属性,并为可点击的图标添加一个通用的类名 button,以便于JavaScript选择和事件绑定。

<div class="swiper-slide">
  <i class="button fa-regular fa-pen-to-square">点击编辑</i>
  <div class="services-item mb-40 elementor-repeater-item-78d8e80">
    <div class="services-item__content">
      <h4 class="services-item__tp-title mb-30">
        <a href="service-details.html">Hello</a>
      </h4>
      <div class="text_area_box">
        <input type="text" name="" required="" />
        <label>Titre</label>
      </div>
    </div>
  </div>
</div>

<div class="swiper-slide">
  <i class="button fa-regular fa-pen-to-square">点击编辑</i>
  <div class="services-item mb-40 elementor-repeater-item-78d8e80">
    <div class="services-item__content">
      <h4 class="services-item__tp-title mb-30">
        <a href="service-details.html">Goodbye</a>
      </h4>
      <div class="text_area_box">
        <input type="text" name="" required="" />
        <label>Titre</label>
      </div>
    </div>
  </div>
</div>

现在,我们有了多个独立的 .swiper-slide 元素,每个元素内部都包含一个 .button 元素和一个 <a> 链接,以及一个 input 字段。

JavaScript实现:事件监听与高效DOM遍历

我们将使用 document.querySelectorAll() 选中所有目标按钮,并通过 forEach 循环为每个按钮绑定点击事件。在事件处理函数中,我们将利用 Event.target、Element.closest() 和 Element.querySelector() 来实现精准的DOM遍历和文本获取。

  1. 选中所有按钮并绑定事件: 使用 document.querySelectorAll('i.button') 来获取页面上所有带有 button 类的 <i> 元素。然后,通过 forEach 循环为每个找到的元素添加一个 click 事件监听器。

  2. 利用 Event.target 获取点击源: 在事件监听器内部,事件对象 e 的 e.target 属性将指向实际被点击的 <i> 元素。

  3. 向上遍历DOM树:Element.closest() 从 e.target 开始,我们需要找到其最近的共同祖先元素,该祖先元素能够唯一标识一个完整的服务项。在本例中,这个祖先元素是带有 swiper-slide 类的 <div>。closest('.swiper-slide') 方法能够高效地完成这一任务,它会从当前元素开始,向上查找(包括自身)第一个匹配指定CSS选择器的祖先元素。

  4. 向下遍历DOM树:Element.querySelector() 一旦我们通过 closest() 找到了代表整个服务项的父容器(例如 parentSlide),我们就可以在其内部使用 querySelector('a') 来查找目标 <a> 元素。querySelector() 会在该父容器的子孙元素中搜索第一个匹配选择器的元素,确保我们获取的是当前服务项的标题链接。

  5. 获取文本内容:Node.textContent 获取到目标 <a> 元素后,使用其 textContent 属性即可获取其包含的纯文本内容,不包括任何HTML标签。

  6. (可选)将文本赋值给输入框: 同样地,在 parentSlide 内部使用 querySelector('input') 可以找到对应的输入框,然后将获取到的文本赋值给它的 value 属性。

下面是完整的JavaScript代码实现:

// 1. 选中所有带有 'button' 类的图标元素
document.querySelectorAll('i.button').forEach(el => {
  // 2. 为每个图标元素添加点击事件监听器
  el.addEventListener('click', e => {
    // 3. 从被点击的元素 (e.target) 开始,向上查找最近的 '.swiper-slide' 祖先元素
    // 这确保了我们操作的是与被点击按钮相关联的那个服务项容器
    const parentSlide = e.target.closest('.swiper-slide');

    // 4. 在找到的 '.swiper-slide' 容器内部,使用 querySelector() 查找 'a' 元素
    // 这确保了我们获取的是当前服务项的标题链接
    const anchorElement = parentSlide.querySelector('a');

    // 5. 获取 'a' 元素的文本内容
    const text = anchorElement.textContent;
    console.log("成功获取到的标题文本内容:", text); // 打印到控制台

    // 6. (可选)将获取到的文本赋值给同服务项中的输入框
    const inputElement = parentSlide.querySelector('input');
    if (inputElement) { // 检查输入框是否存在
      inputElement.value = text;
      console.log("文本已成功赋值给输入框:", inputElement.value);
    }
  });
});

关键概念与最佳实践总结

  • Event.target: 在任何事件处理函数中,e.target 属性始终指向实际触发事件的那个DOM元素,即使事件是通过事件冒泡到达监听器的。
  • Element.closest(selector): 这是一个非常强大的DOM遍历方法。它从当前元素开始,沿着DOM树向上(包括当前元素自身)查找,直到找到第一个与指定CSS选择器匹配的祖先元素。如果找不到,则返回 null。它极大地简化了查找共同父级或特定祖先元素的操作,比手动链式调用 parentNode 更简洁、更健壮。
  • Element.querySelector(selector): 与 document.querySelector() 类似,但它在指定元素的子孙元素中查找第一个匹配CSS选择器的元素。这限制了搜索范围,提高了效率和准确性,尤其是在处理重复组件时。
  • Node.textContent: 用于获取元素及其所有子孙节点的纯文本内容。与 innerHTML 不同,它不会返回HTML标签,只返回可见文本。
  • 事件监听器 addEventListener(): 这是现代JavaScript中推荐的事件绑定方式。它允许为同一个元素绑定多个相同类型的事件处理器,且能更好地管理事件的生命周期。
  • 避免重复 id: 再次强调,id 属性在HTML文档中必须是唯一的。对于可重复的组件或元素集合,应优先使用类(class)进行标识和选择。
  • 事件委托(Event Delegation): 对于页面上大量动态添加或重复出现的元素,如果它们共享一个共同的祖先元素,可以考虑在祖先元素上绑定一个事件监听器,然后通过检查 e.target 来判断是哪个子元素触发了事件。这种技术可以减少内存占用,提高性能。本教程的示例中,为每个按钮单独绑定监听器是可行的,但当按钮数量非常庞大时,事件委托会是更好的选择。

总结

本教程详细阐述了如何通过结合 addEventListener() 进行事件监听,并利用 closest() 和 querySelector() 这两个高效的DOM遍历方法,在复杂的HTML结构中精准定位并获取目标元素的文本内容。掌握这些现代JavaScript和DOM操作技巧,将使您能够编写出更加灵活、高效、易于维护且符合最佳实践的Web交互代码,从而更好地响应用户行为并动态管理网页内容。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

267

2025.12.04

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

891

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

32

2025.12.06

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

4341

2024.08.14

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

4341

2024.08.14

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.11.24

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号