Javascript - 按 id 删除行

标签 javascript html html-table

我当前正在尝试删除 html 表中的行 每行有三个值。第三个值是一个复选框,用于选中应删除的行。单击删除行按钮后,所有选中的行都应被删除。问题是当我单击按钮时我没有执行任何操作并且没有删除任何行。

var counter = 0;

function addRow() {
  var table = document.getElementById("table");
  table.setAttribute("border", "1");
  var row = table.insertRow(counter);
  row.setAttribute("id", "row" + counter);
  var cell1 = row.insertCell(0);
  var cell2 = row.insertCell(1);
  var cell3 = row.insertCell(2);
  cell1.innerHTML = document.getElementById("name").value;
  cell2.innerHTML = document.getElementById("url").value;

  var checkbox = document.createElement("input");
  checkbox.setAttribute("type", "checkbox");
  checkbox.setAttribute("name", "shouldDelete");
  checkbox.setAttribute("id", counter);
  cell3.appendChild(checkbox);

  counter = counter + 1;

}

function deleteRows() {
  var checkedItems = document.getElementsByName("shouldDelete");
  var table = document.getElementById("table");
  for (var i = 0; i < checkedItems.length; i++) {
    if (checkedItems[i].checked) {
      var row = document.getElementById("row" + i);
      table.removeChild(row);
    }
  }
}
table {
  width: 50%;
}
 <h1>Tell me your URL:</h1>
<p>Add a new row</p>
<p>
  <label>Your name:</label>
  <input type="text" id="name">
</p>
<p>
  <label>Your URL:</label>
  <input type="text" id="url">
</p>
<p>
  <button onclick="addRow()">Add to bottom</button>
  <button onclick="deleteRows()">Delete selected row(s)</button>
</p>
<hr>
<table id="table"></table>

这就是我解决问题的方法:

function deleteRows() {
            var checkedItems = document.getElementsByName("shouldDelete");
            var ids = [];
            for(var i=0;i<checkedItems.length;i++) {
                if(checkedItems[i].checked) {
                    ids.push("row"+checkedItems[i].id)
                }
            }

            for(var i=0;i<ids.length;i++) {
                var row = document.getElementById(ids[i]);
                var parent = row.parentNode;
                parent.removeChild(row);
                counter = counter-1;
            }
        }

最佳答案

捕获它

由于您有行的 ID,因此您只需选择它,然后选择它的父行并进行删除即可。

你的代码不起作用,因为表中有一个 tbody 标签或类似的东西,所以 table var 不直接包含 row .

     function deleteRows() {

        var checkedItems = document.getElementsByName("shouldDelete");
        for(var i=0;i<checkedItems.length;i++) {
            if(checkedItems[i].checked) {
                var row = document.getElementById("row"+i);

                var parent = row.parentNode

                parent.removeChild(row)
            }
        }
    }

已更新

好的,我修好了。您需要在循环遍历每个行并删除之前存储行名,因为一旦删除一个项目,您也会删除一个复选框,并且它开始将您指向错误的元素。

function deleteRows() {

        var deletionRowIds = []

        var checkedItems = document.querySelectorAll('[name="shouldDelete"]:checked');

        console.log(checkedItems)

        for (var i = 0; i < checkedItems.length; i++){
            deletionRowIds.push('row' + checkedItems[i].id);
        }


        deletionRowIds.forEach(function(rowId){ 


            var row = document.getElementById(rowId)
          var rowParent = row.parentNode

          rowParent.removeChild(row)
        });

    }

关于Javascript - 按 id 删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41632792/

相关文章:

javascript - touchmove 和 mousemove 的区别

javascript - 如何将生成的元素插入数组并在 React 中渲染它们

html - 为什么我不能重复使用我的 'read now' 按钮的代码?

jQuery、HTML 表格和 .last()

javascript - 如何指定 flowconfig 文件的路径?

html - AngularJS 表单验证 "required"不工作

Jquery 移动用户界面问题

jquery - 使用 jQuery 编辑单个表格单元格

html - 表中的 Jquery 移动 UI 输入下拉格式化行为

javascript - 文本框可以一半只读一半可编辑吗