You need to enable JavaScript to run this app. 如何实现父div下子列表项上下移动,修复list.swap不存在报错
优惠活动
大模型
产品
解决方案
定价
更多

如何实现父div下子列表项上下移动,修复list.swap不存在报错

问题原因

  • parent.children 返回的是动态的HTMLCollection类数组对象,不支持直接通过索引赋值修改元素顺序,也没有内置的swap方法,这是两个报错的根本原因
  • 上移逻辑里直接给list[temp]赋值不会触发DOM重排,所以页面没有任何变化
  • 下移逻辑调用不存在的swap方法,直接抛出类型错误

修复方案

用DOM原生的insertBefore方法实现位置交换即可,不需要操作数组,直接修改DOM节点:

function moveUp(){
    const parent = document.getElementById("answer");
    const activeItem = parent.querySelector(".active");
    // 没有选中项直接返回
    if (!activeItem) return;
    // 拿到上一个兄弟节点
    const prevSibling = activeItem.previousElementSibling;
    if (prevSibling) {
        // 把当前元素插到上一个兄弟节点前面,即实现上移
        parent.insertBefore(activeItem, prevSibling);
    }
}

function moveDown(){
    const parent = document.getElementById("answer");
    const activeItem = parent.querySelector(".active");
    if (!activeItem) return;
    // 拿到下一个兄弟节点
    const nextSibling = activeItem.nextElementSibling;
    if (nextSibling) {
        // 把当前元素插到下一个兄弟节点的下一个节点前面,等价于和下一个兄弟交换位置
        parent.insertBefore(activeItem, nextSibling.nextElementSibling);
    }
}

insertBefore是DOM原生API,会自动把要插入的节点从原有位置移除,再插入到指定位置,不需要手动删除原有节点,比手动操作数组交换更简单高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 20:42:02