我是编码的新手,我想知道是否有更简单的方法遍历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/[email protected]/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>
这是另一种使用.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>
您可以使用事件委托来避免在每个tr
上添加事件。例如:
let body = document.getElementById('body1');
body.addEventListener('click', evt => {
if (evt.target.parentNode.tagName = 'TR') {
body.removeChild(evt.target.parentNode);
}
});
这是假设您的td
中没有任何孩子,以后可能不会出现这种情况。如果您有孩子,您将找到父母tr
,在这种情况下,如果您必须循环,则效率可能不那么高。