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

如何同步删除DOM和数组中对应元素?列表应用开发问题求助

问题根源

你代码中数组删除逻辑的核心错误是:items数组存储的是用户输入的字符串内容,而原有删除逻辑中尝试用DOM节点(li元素)调用indexOf去数组中匹配索引,永远会返回-1,此时调用splice(-1, 1)只会删除数组最后一个元素,和你实际要删除的条目无法对应,因此出现删除错乱的问题。

修正代码

你只需替换原有JS部分代码即可解决问题:

let items = [];

const addItem = () => {
    event.preventDefault();
    const myList = document.getElementById('myList');
    const listItem = document.createElement('li');
    listItem.innerText = itemName.value + "  ";
    const removeButton = document.createElement('button');
    removeButton.innerText = "-";
    removeButton.className = "remove-btn";
    removeButton.addEventListener('click', removeItem);
    listItem.append(removeButton);
    myList.append(listItem);
    items.push(itemName.value);
    document.forms[0].reset();
}

const removeItem = () => {
    const currentLi = event.currentTarget.parentNode;
    // 实时获取当前所有列表项,匹配得到真实索引
    const allListItems = Array.from(document.querySelectorAll('#myList li'));
    const targetIndex = allListItems.indexOf(currentLi);
    // 删除对应数组元素
    items.splice(targetIndex, 1);
    // 删除DOM元素
    currentLi.remove();
}

这样修改后,页面DOM的顺序和数组顺序始终保持一致,每次删除都会先通过实际DOM排列定位要删除元素的索引,再同步删除数组中对应位置的元素,不会出现删除错位的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:15:06