Это эффективный способ удалить строку таблицы из тела таблицы? - PullRequest
2 голосов
/ 13 апреля 2020

Я новичок в кодировании, и мне было интересно, есть ли более простые способы пройти DOM, получить нужные мне элементы и удалить строку при нажатии. Если возможно, я бы предпочел, чтобы эти ответы были сделаны в Vanilla JavaScript, поскольку в настоящее время я пытаюсь по-настоящему понять синтаксис этого языка.

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <title></title>
  </head>
  <body>
    <h1>Lets do this</h1>
    <table class="table">
  <thead>
    <tr>
      <th scope="col">#</th>
      <th scope="col">First</th>
      <th scope="col">Last</th>
      <th scope="col">Handle</th>
    </tr>
  </thead>
  <tbody id="body1">
    <tr data-row="row" class="rows">
      <th scope="srow">1</th>
      <td>Mark</td>
      <td>Otto</td>
      <td>@mdo</td>
    </tr>
    <tr data-row="row" class="rows">
      <th scope="row">2 </th>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>@fat</td>
    </tr>
    <tr data-row="row" class="rows">
      <th scope="row">3</th>
      <td>Larry</td>
      <td>the Bird</td>
    </tr>
  </tbody>
</table>
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>

<script type="text/javascript">


   let body = document.getElementById('body1')
   let trs = document.querySelectorAll('tr')
   for(let i = 0; i < trs.length; i++){
     trs[i].addEventListener('click', function(event){
       body.removeChild(trs[i])
     })
   }



</script>
</body>
</html>

Ответы [ 3 ]

0 голосов
/ 13 апреля 2020

Вы можете использовать делегирование событий, чтобы избежать добавления события на каждый tr. Например:

let body = document.getElementById('body1');

body.addEventListener('click', evt => {
  if (evt.target.parentNode.tagName = 'TR') {
    body.removeChild(evt.target.parentNode);
  }
});

Предполагается, что в ваших td s нет детей, что может быть не так в дальнейшем. Если у вас есть дети, вы найдете родителя tr, и в этом случае это может быть не так эффективно, если вам нужно l oop.

0 голосов
/ 13 апреля 2020

вы можете попробовать это https://jsfiddle.net/m92ehp5k/

let tableRef = document.getElementById('body1');
tableRef.addEventListener('click', function(event){
  event.target.parentNode.remove();
;})
0 голосов
/ 13 апреля 2020

Вот еще один способ, используя .remove(), это немного более кратко:

for (const tr of document.querySelectorAll('#body1 tr')) {
  tr.addEventListener('click', () => tr.remove());
}
<h1>Lets do this</h1>
<table class="table">
  <thead>
    <tr>
      <th scope="col">#</th>
      <th scope="col">First</th>
      <th scope="col">Last</th>
      <th scope="col">Handle</th>
    </tr>
  </thead>
  <tbody id="body1">
    <tr data-row="row" class="rows">
      <th scope="srow">1</th>
      <td>Mark</td>
      <td>Otto</td>
      <td>@mdo</td>
    </tr>
    <tr data-row="row" class="rows">
      <th scope="row">2 </th>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>@fat</td>
    </tr>
    <tr data-row="row" class="rows">
      <th scope="row">3</th>
      <td>Larry</td>
      <td>the Bird</td>
    </tr>
  </tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...