JavaScript 中交换两个元素的部分属性

javascript 中交换两个元素的部分属性

本文介绍了如何在 JavaScript 中高效地交换两个 DOM 元素的部分属性,重点关注 data-* 属性的交换。通过创建属性对象的副本,避免了直接修改原始属性引用导致的问题。同时,探讨了 dataset 属性的局限性,并提供了一种可行的解决方案。

交换指定属性

在某些场景下,我们需要交换两个 DOM 元素的部分属性,而不是全部属性。例如,我们可能只想交换以 data-keep- 开头的自定义数据属性。以下代码展示了如何实现这一目标:

function swapAttributes(el1, el2) {  // 保存需要保留的数据  const el1Keeps = [],    el2Keeps = [];  [...el1.attributes].forEach(attr => {    if (attr.nodeName.startsWith("data-keep-")) {      el1Keeps.push({        name: attr.name,        value: attr.value      });    }  });  [...el2.attributes].forEach(attr => {    if (attr.nodeName.startsWith("data-keep-")) {      el2Keeps.push({        name: attr.name,        value: attr.value      });    }  });  // 将属性设置到另一个元素上  el2Keeps.forEach(keepAttr => {    el1.setAttribute(keepAttr.name, keepAttr.value)  })  el1Keeps.forEach(keepAttr => {    el2.setAttribute(keepAttr.name, keepAttr.value)  })}let elem1 = document.getElementById("item1");let elem2 = document.getElementById("item2");let before = document.getElementById("before");let after = document.getElementById("after");before.innerHTML = 'before: ' + showData(elem1, elem2);swapAttributes(elem1, elem2);after.innerHTML = 'after: ' + showData(elem1, elem2);function showData(a, b) {  let data1 = a.dataset;  let data2 = b.dataset;  return data1.keepRow + "," + data1.keepCol + " and " + data2.keepRow + "," + data2.keepCol;}

代码解释:

swapAttributes(el1, el2) 函数: 接受两个 DOM 元素 el1 和 el2 作为参数。el1Keeps 和 el2Keeps 数组: 用于存储需要交换的属性。循环遍历属性: 使用 […el1.attributes].forEach() 和 […el2.attributes].forEach() 遍历两个元素的属性。属性过滤: 使用 attr.nodeName.startsWith(“data-keep-“) 过滤出以 data-keep- 开头的属性。创建属性副本: 将符合条件的属性的 name 和 value 复制到新的对象中,并添加到相应的 el1Keeps 或 el2Keeps 数组中。关键在于这里创建了新的对象,避免了直接操作原始属性引用。属性交换: 循环遍历 el2Keeps 和 el1Keeps 数组,使用 el1.setAttribute(keepAttr.name, keepAttr.value) 和 el2.setAttribute(keepAttr.name, keepAttr.value) 将属性设置到相应的元素上。

HTML 示例:

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

item1
item2

注意事项

属性引用问题: 直接保存 attr 对象会导致问题,因为它们是原始对象属性的引用。后续对这些对象的修改会影响原始元素。因此,需要创建新的对象来存储属性的 name 和 value。性能考虑: 对于属性数量非常多的元素,循环遍历属性可能会影响性能。可以考虑使用更高效的方法,例如使用 querySelectorAll 选择器直接选择目标属性。dataset 的局限性: 虽然可以使用 [el1.dataset, el2.dataset] = [el2.dataset, el1.dataset] 尝试交换 dataset,但 dataset 是一个只读属性,不能直接赋值。只能单独赋值 element.dataset.XXX。

总结

通过创建属性对象的副本,我们可以安全地交换 DOM 元素的部分属性,避免了直接修改原始属性引用导致的问题。虽然 dataset 属性提供了一种方便的方式来访问 data-* 属性,但它具有只读的局限性。在实际应用中,需要根据具体情况选择合适的解决方案。 这种方法可以应用于更广泛的属性交换场景,只需修改属性过滤条件即可。

以上就是JavaScript 中交换两个元素的部分属性的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1510459.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
优化JavaScript对象中数组元素迁移的策略:双向映射数据结构
上一篇 2025年12月20日 05:58:07
JavaScript:在两个元素之间交换属性子集
下一篇 2025年12月20日 05:58:17

相关推荐

  • 苹果16激活教程_苹果16激活步骤图

    苹果16激活教程_苹果16激活步骤图苹果16激活教程_苹果16激活步骤图苹果16激活教程_苹果16激活步骤图苹果16激活教程_苹果16激活步骤图

    苹果 iPhone 16 的激活步骤如下:开机连接网络选择语言和国家/地区连接无线网络创建或输入 Apple ID设置设备名称选择同步设置设置屏幕时间密码设置 Face ID 或 Touch ID完成激活 苹果16激活步骤图文教程 第一步:开机并连接网络 长按电源键开机。连接Wi-Fi或蜂窝网络。 …

    2026年9月27日 • 用户投稿
    500
  • win10注册表保存不了提示出错怎么办

    win10注册表保存不了提示出错怎么办win10注册表保存不了提示出错怎么办win10注册表保存不了提示出错怎么办win10注册表保存不了提示出错怎么办

    注册表编辑器是计算机系统中的重要组件之一,然而近期有部分windows 10用户在编辑注册表后尝试保存时,遇到了“无法创建值,写入注册表失败”的错误提示。出现这种情况通常是因为当前用户权限不足所致。针对这一问题的具体解决办法如下: Windows 10注册表保存失败的处理方法 首先以管理员身份登录W…

    2026年9月27日 • 用户投稿
    000
  • 多核处理器在运行单线程任务时为何表现不佳?

    多核处理器在运行单线程任务时为何表现不佳?多核处理器在运行单线程任务时为何表现不佳?多核处理器在运行单线程任务时为何表现不佳?多核处理器在运行单线程任务时为何表现不佳?

    多核处理器在运行单线程任务时表现不佳,根本原因在于任务的串行性使其无法并行执行,即便拥有更多核心也难以提升性能。1. 单线程任务只能在一个核心上运行,其他核心无法参与;2. 任务内部存在严格的顺序依赖(如A→B→C),导致无法拆分并行处理;3. 根据Amdahl定律,程序加速比受限于串行部分比例,纯…

    2026年9月27日 • 用户投稿
    400
  • 淘宝精准人群是什么意思?如何操作精准人群?淘宝精准人群运营指南:从入门到精通的核心方法论

    淘宝精准人群是什么意思?如何操作精准人群?淘宝精准人群运营指南:从入门到精通的核心方法论淘宝精准人群是什么意思?如何操作精准人群?淘宝精准人群运营指南:从入门到精通的核心方法论淘宝精准人群是什么意思?如何操作精准人群?淘宝精准人群运营指南:从入门到精通的核心方法论淘宝精准人群是什么意思?如何操作精准人群?淘宝精准人群运营指南:从入门到精通的核心方法论

    在流量红利逐渐减弱的电商背景下,精准化人群运营已经成为淘宝商家不可或缺的核心竞争力。所谓淘宝精准人群,是指基于用户行为数据、消费水平、兴趣标签等多维度信息划分出的高质量目标客户群体。据淘宝大学发布的数据显示,采用精准人群推广策略,点击率可提升40%至60%,转化率更是能增长3到5倍。 一、淘宝精准人…

    2026年9月27日 • 用户投稿
    000
  • sublime怎么显示文档结构图或大纲_Sublime使用插件生成代码大纲视图

    sublime怎么显示文档结构图或大纲_Sublime使用插件生成代码大纲视图sublime怎么显示文档结构图或大纲_Sublime使用插件生成代码大纲视图sublime怎么显示文档结构图或大纲_Sublime使用插件生成代码大纲视图sublime怎么显示文档结构图或大纲_Sublime使用插件生成代码大纲视图

    安装Package Control后,通过它安装CTags插件并生成tags文件实现代码结构可视化;2. 使用Ctrl+T或Ctrl+R快速跳转符号;3. 配合SideBarEnhancements提升导航效率。 Sublime Text 虽然本身不带文档结构图(大纲视图)功能,但可以通过安装插件来…

    2026年9月27日 • 用户投稿
    500
  • Laravel中collection类的使用方法总结(代码)

    Laravel中collection类的使用方法总结(代码)Laravel中collection类的使用方法总结(代码)Laravel中collection类的使用方法总结(代码)Laravel中collection类的使用方法总结(代码)

    Laravel 的 Collection 类其实有很多非常实用的方法,对于我们在优化循环的时候非常的有用,我们的目标就是:不再写 foreach 循环!这篇文章给大家分享的内容是关于Laravel中collection类的使用方法总结(代码),内容很详细,有一定的参考价值,希望可以帮助到有需要的朋友…

    2026年9月27日 • 用户投稿
    100
  • 带动AMD股价上涨7000%:苏妈身家却仅15亿美元!不及黄仁勋1%

    10月12日消息,苏姿丰担任AMD首席执行官已满11年,在其领导下,公司股价累计飙升达7000%。近期因宣布与OpenAI达成合作,股价再度暴涨近40%,市值刷新历史纪录,达到3780亿美元。 尽管带领AMD实现惊人蜕变,并为投资者创造巨额回报,但苏姿丰的个人财富仍未跻身全球富豪前500名。 据《福…

    2026年9月26日
    000
  • ️「领域驱动设计」Java微服务拆分策略与界限上下文划分

    ️「领域驱动设计」Java微服务拆分策略与界限上下文划分️「领域驱动设计」Java微服务拆分策略与界限上下文划分️「领域驱动设计」Java微服务拆分策略与界限上下文划分️「领域驱动设计」Java微服务拆分策略与界限上下文划分

    微服务拆分的核心在于通过领域驱动设计(DDD)识别业务的“自然边界”,其中界限上下文(Bounded Context)是关键。它强调从业务语言和领域专家沟通出发,而非技术视角,确保服务高内聚、低耦合。通过事件风暴、通用语言、业务能力分析等方法识别界限上下文,并结合团队结构与上下文映射明确服务边界。在…

    2026年9月26日 • 用户投稿
    000
  • 有好看漫画合集的app推荐 推荐十个有好看漫画的软件大全

    有好看漫画合集的app推荐 推荐十个有好看漫画的软件大全有好看漫画合集的app推荐 推荐十个有好看漫画的软件大全有好看漫画合集的app推荐 推荐十个有好看漫画的软件大全有好看漫画合集的app推荐 推荐十个有好看漫画的软件大全

    为了帮助广大爱好者找到心仪的阅读平台,我们精心整理了十款备受好评的漫画软件。这些应用不仅拥有海量作品库,还在阅读体验和社区互动方面各具特色,让你轻松告别书荒。 小编推荐一、☞☞☞☞点击必备的看漫APP☜☜☜☜☜ 小编推荐二、☞☞☞☞点击漫画资源最全的平台入口☜☜☜☜☜ 一、快看 1、这是一款非常受年…

    2026年9月26日 • 用户投稿
    200
  • 如何正确配置防火墙规则以平衡安全与性能?

    如何正确配置防火墙规则以平衡安全与性能?如何正确配置防火墙规则以平衡安全与性能?如何正确配置防火墙规则以平衡安全与性能?如何正确配置防火墙规则以平衡安全与性能?

    答案是:防火墙规则需基于最小权限和默认拒绝原则,结合网络拓扑细化规则、定期审计清理僵尸规则,并利用日志监控优化性能与安全;在云环境则需借助自动化工具实现分布式、细粒度的动态防护。 配置防火墙规则以平衡安全与性能,这从来就不是一个一劳永逸的事情,它更像是一场持续的拉锯战。核心在于,你必须清楚地知道自己…

    2026年9月26日 • 用户投稿
    000
  • 解决Oracle字符集修改引起乱码问题的有效方案

    解决Oracle字符集修改引起乱码问题的有效方案解决Oracle字符集修改引起乱码问题的有效方案解决Oracle字符集修改引起乱码问题的有效方案解决Oracle字符集修改引起乱码问题的有效方案

    标题:解决Oracle字符集修改引起乱码问题的有效方案 在Oracle数据库中,当字符集被修改后,往往会因为数据中存在不兼容的字符而导致乱码问题的出现。为了解决这一问题,我们需要采取一些有效的方案来处理。本文将介绍一些解决Oracle字符集修改引起乱码问题的具体方案和代码示例。 一、导出数据并重新设…

    2026年9月26日 • 用户投稿
    000
  • win11任务栏卡死重启也没用怎么办

    win11任务栏卡死重启也没用怎么办win11任务栏卡死重启也没用怎么办win11任务栏卡死重启也没用怎么办win11任务栏卡死重启也没用怎么办

    在安装windows 11系统之后,许多用户的电脑可能会遇到一些使用上的问题,其中较为常见的就是任务栏卡死的现象。那么,当win11的任务栏卡死且重启无效时,该如何处理呢?接下来就为大家介绍几种解决win11任务栏卡死的有效方法。 第一种方法(官方提供的临时解决方案): 首先按下Ctrl+Alt+D…

    2026年9月26日 • 用户投稿
    600
  • 热度暴涨!《战地2042》Steam在线人数压过使命召唤

    热度暴涨!《战地2042》Steam在线人数压过使命召唤热度暴涨!《战地2042》Steam在线人数压过使命召唤热度暴涨!《战地2042》Steam在线人数压过使命召唤热度暴涨!《战地2042》Steam在线人数压过使命召唤

    近期,《战地2042》展现出出人意料的回暖趋势,其在线玩家数量甚至一度超越《使命召唤》系列,成为Steam平台上的热门焦点。在经历多年人气低迷之后,《战地》这一经典IP似乎正逐步走出低谷,迎来新一轮的复苏曙光。 回顾《战地》系列的辉煌起点,初代作品凭借标志性的可破坏环境、宏大的战场规模以及别具一格的…

    2026年9月26日 • 用户投稿
    000
  • DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙

    DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙DeepSeek + 剪映文字成片:AI写文案+AI配音+AI剪辑一条龙

    使用deepseek和剪映制作视频的流程包括三个步骤:首先,通过明确指令和提供示例优化deepseek生成文案;其次,选择合适配音并调整参数提升剪映ai配音自然度;最后,利用剪映ai剪辑快速生成初版视频并手动精细调整以达到理想效果。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使…

    2026年9月26日 • 用户投稿
    000
  • 通过手机IP查询详细地址的方法(利用手机IP地址追踪定位目标位置的技巧与工具)

    手机IP地址查询:位置信息与隐私保护的平衡 移动时代下手机ip定位分析在移动互联网时代,手机ip地址已成为定位的宝贵信息来源。了解如何通过手机ip查询大致位置至关重要。本文由php小编柚子深入剖析这一技术,探讨其应用场景、局限性以及与隐私保护相关的考量。通过深入阅读,您将洞悉手机ip定位的原理、应用…

    2026年9月26日
    700
  • TikTok视频播放黑屏怎么办

    TikTok视频播放黑屏怎么办TikTok视频播放黑屏怎么办TikTok视频播放黑屏怎么办TikTok视频播放黑屏怎么办

    先检查网络连接,切换Wi-Fi与移动数据并重启路由器;再清理TikTok缓存,进入应用管理存储项点击清除缓存;接着更新或重装App;最后核对系统时间与权限设置,确保网络和存储权限开启。 遇到TikTok视频播放黑屏的问题,通常和网络、缓存或应用本身有关。别急,可以一步步排查解决。 检查网络连接 视频…

    2026年9月26日 • 用户投稿
    000
  • Laravel的功能测试:测试驱动开发(附代码)

    本篇文章给大家带来的内容是关于laravel的功能测试:测试驱动开发(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 创建carousel功能测试 在对你的项目进行功能测试的时候,一定要确保管理后台的功能测试要与前台的功能测试隔离开来。在本例中,我通过命名空间Admin和F…

    2026年9月26日
    200
  • 系统安装完成后,用什么工具批量安装驱动最方便?

    系统安装完成后,用什么工具批量安装驱动最方便?系统安装完成后,用什么工具批量安装驱动最方便?系统安装完成后,用什么工具批量安装驱动最方便?系统安装完成后,用什么工具批量安装驱动最方便?

    集成式驱动管理软件虽能快速安装驱动,但存在捆绑软件、驱动版本过时、隐私安全风险及系统不稳定等问题。建议仅用其解决网卡驱动等燃眉之急,后续优先从主板、显卡等设备官网下载匹配驱动,通过Windows Update补充基础驱动,并按芯片组→网卡→显卡→声卡顺序安装。安装后需检查设备管理器状态,进行功能测试…

    2026年9月26日 • 用户投稿
    100
  • sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧

    sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧sublime如何快速删除所有带标记的书签行_sublime快速删除书签行技巧

    使用“Bookmark: Select All Bookmarked Lines”命令选中所有书签行,再按Delete键即可批量删除,结合命令面板操作高效快捷。 在Sublime Text中,快速删除所有带有书签标记的行可以通过“书签”功能结合“命令面板”和“查找替换”的高级操作实现。虽然Subli…

    2026年9月26日 • 用户投稿
    000
  • TGS 2025:《雷顿教授与蒸汽新世界》延期到2026年发售

    TGS 2025:《雷顿教授与蒸汽新世界》延期到2026年发售TGS 2025:《雷顿教授与蒸汽新世界》延期到2026年发售TGS 2025:《雷顿教授与蒸汽新世界》延期到2026年发售TGS 2025:《雷顿教授与蒸汽新世界》延期到2026年发售

    在tgs 2025展会上,level 5正式宣布《雷顿教授与蒸气新世界》将延期至2026年推出。与此同时,游戏媒体巴哈姆特释出了一段长达12分钟的实机试玩影片,让玩家得以抢先了解当前版本的游戏内容与开发进度。 AI新媒体文章 专为新媒体人打造的AI写作工具,提供“选题创作”、“文章重写”、“爆款标题…

    2026年9月26日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信