TypeError: Failed to execute ‘removeChild‘ on ‘Node‘: parameter 1 is not of type ‘Node‘.

目的:JS 动态表格,读取数据创建表格,点击删除单元格删除该行。

问题:删除时,删除第一行后,再删除第二行会造成第三行删除,并且最终剩下的一行无法删除。

原因:`tbody.removeChild(tbody.children[i])` 中每次删除后,tbody.children[i] 的值就变成了删除前的tbody.children[i+1]。

解决方案:改为 `tbody.removeChild(this.parentNode);`

代码如下:

<body>
    <table>
        <thead>
            <tr>
                <th>姓名</th>
                <th>科目</th>
                <th>成绩</th>
                <th>操作</th>
            </tr>
        </thead>

        <tbody>

        </tbody>
    </table>
    <script>
        var datas = [
            {
                name: '张三',
                subject: 'JS',
                score: 90
            }, {
                name: '李四',
                subject: 'JS',
                score: 80
            }, {
                name: '王五',
                subject: 'JS',
                score: 70
            }, {
                name: '赵六',
                subject: 'JS',
                score: 60
            }
        ];
        var tbody = document.querySelector('tbody');
        for (let i = 0; i < datas.length; i++) {
            var tr = document.createElement('tr');
            tbody.appendChild(tr);
            for (let k in datas[i]) {
                var td = document.createElement('td');
                td.innerText = datas[i][k];
                tbody.children[i].appendChild(td)
            }
            var td2 = document.createElement('td');
            td2.innerText = '删除';
            tbody.children[i].appendChild(td2);
        }

        for (let i = 0; i < tbody.children.length; i++) {
            tbody.children[i].children[3].onclick = function () {
                // tbody.removeChild(tbody.children[i]);    //WRONG!!
                tbody.removeChild(this.parentNode);         //RIGHT
            }
        }
    </script>
</body>

详细分析&参考:通过DOM动态删除多个节点报错原因理解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值