Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

148
Visualizações
delete multiply HTML rows based on checkbox

The table below initially creates 5 rows, now I want to delete all rows where the checkbox is selected. To do so I insert a checkbox in cell[0]. The delete button iterates through all rows and should delete all rows with a checked checkbox.

It does work, if only one checkbox is selected but seems buggy if multiply rows are checked. I assume the issue appears because the index changes as soon as the first checked row was deleted. Nethertheless how could I achieve a similar behavour without the need to create single delete buttons for each row?

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<style>
    table, th, td {
        border: 1px solid black;
    }
</style>

<body>
    <div id="wrapper">
        <button id="deleteRow">-</button>
        <table id="table">
            <tbody>
                <!-- filled by script -->
            </tbody>
        </table>
    </div>

    <script>

        // add initial rows
        var table = document.getElementById("table")

        for (var i = 0; i < 5 ; i++) {
            var row = table.insertRow(i)
            var cell0 = row.insertCell(0);
            var cell1 = row.insertCell(1);
            var cell2 = row.insertCell(2);

            cell0.contentEditable = false;
            cell1.contentEditable = true;
            cell2.contentEditable = true;

            cell0.innerHTML = '<input type="checkbox">';
            cell1.innerHTML = 'Property: ' + i;
            cell2.innerHTML = 'Value';
        }

        // BUTTON: delete row
        document.getElementById("deleteRow").addEventListener("mouseup", function() {
            var table = document.getElementById("table");
            var row = table.rows;
            
            for (var i = 0; i < row.length; i++) {
                if (row[i].cells[0].firstElementChild.checked) {
                    table.deleteRow(i);
                }
            }
        })
    </script>
</body>
</html>

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

I would not iterate over the rows, instead use a querySelectorAll for all checked checkboxes and remove the parent tr element. Like this:

document.getElementById("deleteRow").addEventListener("click", function() {
  const checkboxes = document.querySelectorAll('input:checked');
  checkboxes.forEach(checkbox => checkbox.parentElement.parentElement.remove());
})

Here's the full example:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<style>
  table,
  th,
  td {
    border: 1px solid black;
  }
</style>

<body>
  <div id="wrapper">
    <button id="deleteRow">-</button>
    <table id="table">
      <tbody>
        <!-- filled by script -->
      </tbody>
    </table>
  </div>

  <script>
    // add initial rows
    var table = document.getElementById("table")

    for (var i = 0; i < 5; i++) {
      var row = table.insertRow(i)
      var cell0 = row.insertCell(0);
      var cell1 = row.insertCell(1);
      var cell2 = row.insertCell(2);

      cell0.contentEditable = false;
      cell1.contentEditable = true;
      cell2.contentEditable = true;

      cell0.innerHTML = '<input type="checkbox">';
      cell1.innerHTML = 'Property: ' + i;
      cell2.innerHTML = 'Value';
    }

    // BUTTON: delete row
    document.getElementById("deleteRow").addEventListener("click", function() {
      const checkboxes = document.querySelectorAll('input:checked');
      checkboxes.forEach(checkbox => checkbox.parentElement.parentElement.remove());
    })
  </script>
</body>

</html>

about 4 years ago · Juan Pablo Isaza Relatório

0

how about just the button?

<button onclick="document.querySelectorAll('#table input:checked').forEach( el => el.parentNode.parentNode.remove() )" >
  Delete rows 
</button>
about 4 years ago · Juan Pablo Isaza Relatório

0

When 0th and 1st row should be removed, the indices changes after table.deleteRow(i).

Consider deleting them at once or backward.

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<style>
    table, th, td {
        border: 1px solid black;
    }
</style>

<body>
    <div id="wrapper">
        <button id="deleteRow">-</button>
        <table id="table">
            <tbody>
                <!-- filled by script -->
            </tbody>
        </table>
    </div>

    <script>

        // add initial rows
        var table = document.getElementById("table")

        for (var i = 0; i < 5 ; i++) {
            var row = table.insertRow(i)
            var cell0 = row.insertCell(0);
            var cell1 = row.insertCell(1);
            var cell2 = row.insertCell(2);

            cell0.contentEditable = false;
            cell1.contentEditable = true;
            cell2.contentEditable = true;

            cell0.innerHTML = '<input type="checkbox">';
            cell1.innerHTML = 'Property: ' + i;
            cell2.innerHTML = 'Value';
        }

        // BUTTON: delete row
        document.getElementById("deleteRow").addEventListener("mouseup", function() {
            var table = document.getElementById("table");
            var row = table.rows;
            
            for (var i = row.length-1; i >= 0; i--) {
                if (row[i].cells[0].firstElementChild.checked) {
                    table.deleteRow(i);
                }
            }
        })
    </script>
</body>
</html>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda