You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JavaScript实现点击按钮交换两个div及其子元素位置

点击按钮交换两个div容器及全部子元素实现方案

原有代码问题

你之前写的逻辑仅尝试读写div元素的value属性,但div元素本身不存在原生value属性,且逻辑完全没有操作DOM节点,自然无法实现两个容器及内部内容整体互换的效果。

正确实现逻辑

直接通过原生DOM节点操作完成两个元素的位置互换,不需要手动复制子元素、属性或HTML内容,元素绑定的事件、所有子节点、自定义属性都会随节点整体移动,无内容丢失风险,性能优于innerHTML替换方案。

修正后的JavaScript代码

function switchTokens() {
  // 获取两个待交换的容器节点
  const fromTokenEl = document.getElementById('from_token_select');
  const toTokenEl = document.getElementById('to_token_select');

  // 创建临时占位节点标记原始位置
  const tempNode = document.createComment('swap-placeholder');
  fromTokenEl.parentNode.insertBefore(tempNode, fromTokenEl);
  // 移动两个节点完成位置互换
  fromTokenEl.parentNode.insertBefore(fromTokenEl, toTokenEl);
  toTokenEl.parentNode.insertBefore(toTokenEl, tempNode);
  // 清理临时占位节点
  tempNode.remove();
}

HTML代码修正说明

原有代码中第二个img标签的src属性值未加引号,不符合HTML规范,修正后完整HTML如下:

<div class="token_select" id="from_token_select">
  <img src="https://image-placeholder.com/images/actual-size/75x100.png" class="token_image" id="from_token_img" />
  <span id="from_token_text">from_token_text</span>
</div>

<button onClick="switchTokens()" id="swap_token_address" class="fa-solid fa-arrows-up-down">switchTokens Btn</button>

<div class="token_select" id="to_token_select">
  <img src="https://image-placeholder.com/images/actual-size/88x31.png" class="token_image" id="to_token_img" />
  <span id="to_token_text">to_token_text</span>
</div>

补充说明

如果业务上需要同步两个容器关联的表单值、状态数据,只需要在节点交换逻辑执行完成后,追加对应的数据同步代码即可,上述节点交换逻辑已经可以实现两个div从视觉到DOM结构的100%位置互换。


内容的提问来源于stack exchange,提问作者Dionisio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 08:57:20