js实现购物车删除页面,不能全部删除,全选只会删除第一行

img

img

  function deleteShop(){
//先判断是否选择了删除的商品
var sel=document.getElementsByName('sel');
var j=0;
for(var i=0;i<sel.length;i++){
    if(sel[i].checked==true){
        j=j+1;
    }if(j==0){
    confirm('请选择商品');
    return;
}
var result=confirm('确定删除吗');
if(result){
    //删除操作
    for(var i=0;i<sel.length;i++){
        if(sel[i].checked==true){
            j=j+1;
            //获取id
            if(i==0){
                var id=sel[i].id;
            }else if(i==sel.length){
                
            }else{
                var id=sel[i-1].id;
            }
            
            //获取索引
            var index=id.substr(id.length-1,3);
            document.getElementById('myTable').deleteRow(parseInt(index)+1);
        }
    }
}else{
    
}
}

}

题主逻辑有些混乱,改了代码,具体看代码注释。有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~

    function deleteShop() {
        //先判断是否选择了删除的商品
        var sel = document.getElementsByName('sel');
        var j = 0;
        for (var i = 0; i < sel.length; i++) {
            if (sel[i].checked == true) {
                j = j + 1;
            }
        }
        //判断要放外面
        if (j == 0) {
            alert('请选择商品');
            return;
        }
        /////////这里应该断开,判断归判断,删除归删除
        var result = confirm('确定删除吗');
        if (result) {
            //删除操作
            for (var i = sel.length - 1; i >= 0; i--) {//而且需要从后面开始遍历,从头开始遍历,删除后会导致sel集合-1,会删除不完,只能删1半的记录
                if (sel[i].checked == true) {
                    //没看懂下面的逻辑,可以不需要
                    /*j = j + 1;
                    //获取id
                    if (i == 0) {
                        var id = sel[i].id;
                    } else if (i == sel.length) {
                    } else {
                        var id = sel[i - 1].id;
                    }*/
                    //获取索引
                    //var index = id.substr(id.length - 1, 3);
                    //document.getElementById('myTable').deleteRow(parseInt(index) + 1);
                    //不能用id后的数字来删除,有bug,第一次删除后索引就全变了,如删除了sel0,那么原来的sel1行索引就变0了,在通过id后数字来获取,那么就会删除到下一行了
                    //应该通过dom关系来删除

                    var tr = sel[i].parentNode.parentNode;//获取CheckBox所在的tr
                    tr.parentNode.removeChild(tr)//////////删除tr
                }
            }
        }
    }

题主可以参考我之前写购物车代码