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

如何用原生JavaScript删除目标按钮前的指定元素且不影响其他内容?

如何用原生JavaScript删除另一个元素之前的元素?

我的HTML代码

<input type="text" class="form-control mt-3" placeholder="Item name" aria-label="Item name" required>
<input type="file" class="form-control mt-3" required>
<button type="button" class="btn btn-danger mt-3 w-100 removeItem">Remove item</button>

我的JavaScript代码

document.querySelector('.container').addEventListener('click', (e) => {
    if (e.target.classList.contains('removeItem')) {
        // e.target.insertAdjacentHTML('beforebegin', 'test');
        console.log(e.target.parentNode)
    }
});

addItemBtn.addEventListener("click", (e) => {
    if (createBinModalForm.checkValidity()) {
        addItemBtn.insertAdjacentHTML('beforebegin', '<hr/>');
        addItemBtn.insertAdjacentHTML('beforebegin', `
        <input type="text" class="form-control mt-3" placeholder="Item name" aria-label="Item name" required>
        <input type="file" class="form-control mt-3" required>
        <button type="button" class="btn btn-danger mt-3 w-100 removeItem">Remove item</button>
        `);
    }
})

解决方案

方案1:基于现有结构直接删除前置元素

利用previousElementSibling属性逐个获取并删除目标按钮前的三个元素,最后删除按钮本身:

document.querySelector('.container').addEventListener('click', (e) => {
    if (e.target.classList.contains('removeItem')) {
        const btn = e.target;
        // 删除按钮前的3个元素
        for (let i = 0; i < 3; i++) {
            const prevEl = btn.previousElementSibling;
            if (prevEl) prevEl.remove();
        }
        // 删除按钮自身
        btn.remove();
    }
});

方案2:优化结构(更鲁棒的做法)

依赖元素顺序的写法容易出错,推荐把每个新增项包裹在容器中,点击删除按钮时直接移除整个容器:

先修改添加元素的代码:

addItemBtn.addEventListener("click", (e) => {
    if (createBinModalForm.checkValidity()) {
        addItemBtn.insertAdjacentHTML('beforebegin', `
        <div class="item-group">
            <hr/>
            <input type="text" class="form-control mt-3" placeholder="Item name" aria-label="Item name" required>
            <input type="file" class="form-control mt-3" required>
            <button type="button" class="btn btn-danger mt-3 w-100 removeItem">Remove item</button>
        </div>
        `);
    }
})

再修改删除逻辑:

document.querySelector('.container').addEventListener('click', (e) => {
    if (e.target.classList.contains('removeItem')) {
        // 找到父容器并删除
        e.target.closest('.item-group').remove();
    }
});

这种方式不依赖元素顺序,后续结构调整也不容易出问题,是更推荐的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:25:17