新闻中心

从子元素的父元素中获取另一个子元素的内容

2025-10-25
浏览次数:
返回列表

从子元素的父元素中获取另一个子元素的内容

本文旨在解决从一个元素的父元素中访问其兄弟元素内容的问题,尤其是在动态生成的列表项中删除特定任务时。我们将探讨如何通过已知的子元素(如删除按钮)定位到其父元素,并准确获取目标兄弟元素(包含任务内容)的内容,从而实现对数据的高效操作。

在Web开发中,经常需要操作DOM元素,特别是当页面结构动态生成时。一个常见的场景是,当用户点击一个元素(比如删除按钮)时,需要访问其父元素下的其他子元素,例如获取列表项中的任务内容。本文将详细介绍如何通过J*aScript实现这一功能,并提供一个实际的待办事项列表的例子。

获取兄弟元素内容的方法

假设我们有如下HTML结构:

<li class="task">
  <div class="left">
    <input type="checkbox" class="box" />
    <p class="content">待办事项内容</p>
  </div>
  <button class="btn delete">
    <i class="fa-solid fa-trash-can"></i>
  </button>
</li>

我们的目标是,当点击.delete按钮时,获取.content元素中的文本内容。以下是一种实现方法:

  1. 获取父元素引用: 首先,通过event.target.parentElement或直接使用已知的父元素引用(如btn.parentElement)获取到父元素(.task)。

  2. 使用querySelector定位兄弟元素: 然后,使用parentElement.querySelector('.content')在父元素内部查找类名为.content的元素。

  3. 获取文本内容: 最后,通过.textContent或.innerText属性获取该元素的文本内容。

    小爱开放平台 小爱开放平台

    小米旗下小爱开放平台

    小爱开放平台 291 查看详情 小爱开放平台

以下是修改后的deleteBtn函数示例:

function deleteBtn() {
    deleteHTML.forEach(btn => {
        btn.addEventListener("click", () => {
            console.log("delete");
            btn.parentElement.style.display = "none";

            // 正确获取.content元素
            let p = btn.parentElement.querySelector('.content');
            console.log(p.textContent); // 输出:待办事项内容

            // 在此处可以进行后续操作,如从tasks数组中删除对应的任务

            if (tasks.length < 1) {
                console.log("remove background");
                tasksHTML.classList.remove("background");
            }
        });
    });
}

代码解释:

  • btn.parentElement.querySelector('.content'):这行代码首先获取btn(删除按钮)的父元素,然后使用querySelector在该父元素内部查找类名为.content的元素。
  • p.textContent:这行代码获取找到的.content元素的文本内容。

完整示例:待办事项列表

以下是一个完整的待办事项列表示例,包含添加、删除任务的功能:

<!DOCTYPE html>
<html>
<head>
    <title>待办事项列表</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" integrity="sha512-9usAa10IRO0HhonpyAIVpjrylPvoDwiPUiKdWk5t3PyolY1cOd4DSE0Ga+ri4AuTroPR5aQvXU9xC6qOPnzFeg==" crossorigin="anonymous" referrerpolicy="no-referrer" />
    <style>
        .tasks {
            list-style: none;
            padding: 0;
        }

        .task {
            display: flex;
            justify-content: space-between;
            align-items: center;
            padding: 10px;
            border-bottom: 1px solid #eee;
        }

        .left {
            display: flex;
            align-items: center;
        }

        .content {
            margin-left: 10px;
        }

        .delete {
            background-color: #f44336;
            color: white;
            border: none;
            padding: 5px 10px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <h1>待办事项列表</h1>
    <form>
        <input type="text" class="task-input" placeholder="添加新任务">
        <button type="submit" class="submit">添加</button>
    </form>
    <ul class="tasks"></ul>

    <script>
        var tasks = [];
        const form = document.querySelector("form");
        const formInput = document.querySelector(".task-input");
        const tasksHTML = document.querySelector(".tasks");

        form.addEventListener("submit", (event) => {
            event.preventDefault(); // 阻止表单默认提交行为
            const taskText = formInput.value.trim();
            if (taskText !== "") {
                addTask(taskText);
                formInput.value = "";
            }
        });

        function addTask(taskText) {
            const task = {
                id: Date.now(), // 使用时间戳生成唯一ID
                text: taskText,
                done: false
            };
            tasks.push(task);
            renderTasks();
        }

        function renderTasks() {
            tasksHTML.innerHTML = ""; // 清空列表
            tasks.forEach(task => {
                const li = document.createElement("li");
                li.classList.add("task");
                li.innerHTML = `
                    <div class="left">
                        <input type="checkbox" class="box" ${task.done ? 'checked' : ''} data-id="${task.id}" />
                        <p class="content">${task.text}</p>
                    </div>
                    <button class="btn delete" data-id="${task.id}">
                        <i class="fa-solid fa-trash-can"></i>
                    </button>
                `;
                tasksHTML.appendChild(li);
            });

            // 添加删除按钮事件监听器
            const deleteButtons = document.querySelectorAll(".delete");
            deleteButtons.forEach(button => {
                button.addEventListener("click", () => {
                    const taskId = parseInt(button.dataset.id);
                    deleteTask(taskId);
                });
            });

            // 添加复选框事件监听器
            const checkboxes = document.querySelectorAll(".box");
            checkboxes.forEach(checkbox => {
                checkbox.addEventListener("change", () => {
                    const taskId = parseInt(checkbox.dataset.id);
                    toggleTask(taskId);
                });
            });
        }

        function deleteTask(taskId) {
            tasks = tasks.filter(task => task.id !== taskId);
            renderTasks();
        }

        function toggleTask(taskId) {
            tasks = tasks.map(task => {
                if (task.id === taskId) {
                    task.done = !task.done;
                }
                return task;
            });
            renderTasks();
        }

        renderTasks(); // 初始渲染
    </script>
</body>
</html>

注意事项:

  • 避免硬编码选择器: 尽量避免在J*aScript代码中硬编码CSS选择器。如果HTML结构发生变化,代码可能需要修改。
  • 使用事件委托: 如果列表项是动态添加的,使用事件委托可以提高性能。将事件监听器添加到父元素上,然后根据事件目标来确定要操作的元素。
  • 唯一标识符: 为每个列表项添加一个唯一的标识符(例如ID),方便在数据结构中查找和删除对应的任务。 在上面的示例中,我们使用Date.now()生成唯一的ID。
  • 数据同步: 确保DOM结构和数据结构(例如tasks数组)保持同步。在删除或修改任务时,同时更新DOM和数据结构。

总结

本文介绍了如何通过J*aScript从一个元素的父元素中获取另一个子元素的内容。通过获取父元素引用,并使用querySelector方法,可以方便地定位到目标子元素,并获取其文本内容。在实际应用中,需要注意避免硬编码选择器、使用事件委托、使用唯一标识符以及保持DOM结构和数据结构同步。 通过这些技巧,可以更有效地操作DOM元素,构建动态和交互性强的Web应用程序。

以上就是从子元素的父元素中获取另一个子元素的内容的详细内容,更多请关注其它相关文章!


# javascript  # 应用程序  # 显示效果  # 其父  # 从子  # 单选框  # 选择器  # 小爱  # 表单  # 数据结构  # c  # cdn  # ai  # ssl  # app  # 编码  # ajax  # js  # html  # java  # css  # web应用程序  # 白下区网络推广招聘网站  # 内贸推广营销方案怎么写  # 延安网站seo优化推广  # 免费开源的网站建设系统  # seo优化外包网站推广方法大全  # 济南seo学习  # 严陵镇塔山村网站建设  # 沈阳网站设计优化案例  # 岳阳网站建设详细策划  # 唐山网站推广制作  # 这行 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 我的世界官方游戏入口 我的世界官网平台直达链接  谷歌google账号怎么注册账号 谷歌账号注册官方流程  小米Civi 4录制视频过暗_小米Civi 4亮度优化  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  支付宝如何管理隐私设置_支付宝隐私保护的配置技巧  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  顺丰国际快递查询 国际件官方查询入口  支付宝如何设置安全保护_支付宝安全设置的全面教程  Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  《马克思佩恩3》早期版本曝光 UI设计曾多次调整!  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  抖音未来赚钱的新趋势 2025年值得关注的变现风口分析  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端  Win11怎么查看电脑配置_Win11硬件配置检测工具使用  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  b站怎么看视频的弹幕数量_b站弹幕数量查看方法  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  Python多线程中正确使用sigwait处理SIGALRM信号  2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  qq游戏网页版直接玩_qq游戏免下载快速入口  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  Android Studio计算器C键功能异常排查与修复教程  微博网页版官方账号登录 微博网页版内容浏览使用指南  包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址  蛙漫画网页版全站入口 蛙漫热门作品免费浏览  cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法  深入理解J*a链表中的IPosition接口与使用  《燕云十六声》两周内达九百万玩家!位居畅销榜第五  12306选座怎么选到特殊座位_12306特殊座位选择注意事项  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  绝地鸭卫平a核爆刀流玩法攻略  俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口  QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南  Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法  快手极速版在线观看 官方网页版登录地址  抖音网页版快捷访问 抖音网页版网页版入口操作教程  J*aScript异步迭代器_j*ascript异步遍历  2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南  在VS Code中配置和运行Dart程序的完整步骤  曝R星经典之作开发图 设计简陋但信息密集!  Mac怎么锁定备忘录_Mac备忘录加密设置教程  极兔快递快件信息查询系统 极兔快递官网运单号追踪  css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  实现分段式页面滚动导航:CSS与J*aScript教程  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址 

搜索