当前位置:首页 > JavaScript

js点击实现元素互换

2026-01-31 04:19:40JavaScript

实现元素互换的 JavaScript 方法

通过 JavaScript 实现点击元素后互换位置,可以结合 DOM 操作和事件监听。以下是几种常见方法:

交换 HTML 元素内容

适用于简单元素内容交换,保留原 DOM 节点:

js点击实现元素互换

document.querySelectorAll('.swap-item').forEach(item => {
  item.addEventListener('click', function() {
    const sibling = this.nextElementSibling;
    if (sibling && sibling.classList.contains('swap-item')) {
      const temp = this.innerHTML;
      this.innerHTML = sibling.innerHTML;
      sibling.innerHTML = temp;
    }
  });
});

交换 DOM 节点位置

直接修改节点在 DOM 树中的位置:

js点击实现元素互换

function swapNodes(node1, node2) {
  const parent = node1.parentNode;
  const ref = node2.nextSibling;
  parent.insertBefore(node2, node1);
  if (ref) {
    parent.insertBefore(node1, ref);
  } else {
    parent.appendChild(node1);
  }
}

document.querySelector('.container').addEventListener('click', (e) => {
  if (e.target.classList.contains('swap-target')) {
    const next = e.target.nextElementSibling;
    if (next && next.classList.contains('swap-target')) {
      swapNodes(e.target, next);
    }
  }
});

使用 CSS 动画增强交互

添加过渡效果使交换更平滑:

.swappable {
  transition: transform 0.3s ease;
}
function animatedSwap(el1, el2) {
  const rect1 = el1.getBoundingClientRect();
  const rect2 = el2.getBoundingClientRect();

  el1.style.transform = `translate(${rect2.left - rect1.left}px, ${rect2.top - rect1.top}px)`;
  el2.style.transform = `translate(${rect1.left - rect2.left}px, ${rect1.top - rect2.top}px)`;

  setTimeout(() => {
    el1.style.transform = '';
    el2.style.transform = '';
    swapNodes(el1, el2);
  }, 300);
}

实现注意事项

  • 事件委托更适合动态生成的元素
  • 考虑边界情况(如无相邻元素时)
  • 移动端需要添加 touch 事件支持
  • 复杂结构建议使用数据驱动方式(如通过框架)

扩展方案

对于列表重排序需求,可以结合数据数组操作:

let itemsArray = [...document.querySelectorAll('.list-item')];

function reorderItems(index1, index2) {
  [itemsArray[index1], itemsArray[index2]] = [itemsArray[index2], itemsArray[index1]];
  renderList();
}

function renderList() {
  const container = document.querySelector('.list-container');
  container.innerHTML = '';
  itemsArray.forEach(item => container.appendChild(item));
}

标签: 元素js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数:…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="d…