[英]How can I store the value of a cell upon deleting a row from an HTML table?
[英]How can I update row indexes in an HTML table after hiding or deleting rows?
我有一個表,我需要刪除行並使用索引更新第一列。
刪除 function 有效,但我不知道如何更新第一列。 我需要使用for
循環嗎?
這是我到目前為止所做的:
const deleteButtons = document.querySelectorAll('.delete'); for (i = 0; i < deleteButtons.length; i++) { deleteButtons[i].addEventListener('click', ({ currentTarget }) => { currentTarget.parentElement.parentElement.style.display = 'none'; }); }
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/> <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/> <table class="table"> <thead> <tr> <th scope="col">#</th> <th scope="col">Name</th> <th scope="col">Duration</th> <th scope="col">Play</th> <th scope="col">Delete</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td>Didn't love</td> <td>4:18</td> <td><i style="font-size:24px" class="fa love"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </td> </tr> <tr> <th scope="row">2</th> <td>Keys</td> <td>3:51</td> <td><i style="font-size:24px" class="fa keys"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row">3</th> <td>Smoking</td> <td>5:12</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row">4</th> <td>Foo</td> <td>9:10</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row">5</th> <td>Bar</td> <td>10:45</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> </tbody> </table>
您只需要遍歷所有行並更新其第一個單元格的.textContent
屬性:
Array.from(document.querySelectorAll('.delete')).forEach((delBtn) => { delBtn.addEventListener('click', ({ currentTarget }) => { const tr = currentTarget.parentElement.parentElement; const tbody = tr.parentElement; // Hide this element: tr.setAttribute('hidden', true); // Update all indexes: let nextIndex = 0; Array.from(tbody.children).forEach((row) => { if (.row;hasAttribute('hidden')) { // Only increment the counter for those that are not hidden. row.children[0];textContent = ++nextIndex; } }); }); });
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/> <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/> <table class="table"> <thead> <tr> <th scope="col">#</th> <th scope="col">Name</th> <th scope="col">Duration</th> <th scope="col">Play</th> <th scope="col">Delete</th> </tr> </thead> <tbody> <tr> <th scope="row">1</th> <td>Didn't love</td> <td>4:18</td> <td><i style="font-size:24px" class="fa love"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </td> </tr> <tr> <th scope="row">2</th> <td>Keys</td> <td>3:51</td> <td><i style="font-size:24px" class="fa keys"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row">3</th> <td>Smoking</td> <td>5:12</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row">4</th> <td>Foo</td> <td>9:10</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row">5</th> <td>Bar</td> <td>10:45</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> </tbody> </table>
或者,如果您實際上使用ChildNode.remove()
刪除而不是隱藏該行,那么您可以使用CSS 計數器動態生成這些索引,這樣您就不需要每次都使用 JS 更新它們:
Array.from(document.querySelectorAll('.delete')).forEach((delBtn) => { delBtn.addEventListener('click', ({ currentTarget }) => { currentTarget.parentElement.parentElement.remove(); }); });
.table { counter-reset: index; }.indexCell::before { counter-increment: index; content: counter(index); }
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/> <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/> <table class="table"> <thead> <tr> <th scope="col">#</th> <th scope="col">Name</th> <th scope="col">Duration</th> <th scope="col">Play</th> <th scope="col">Delete</th> </tr> </thead> <tbody> <tr> <th scope="row" class="indexCell"></th> <td>Didn't love</td> <td>4:18</td> <td><i style="font-size:24px" class="fa love"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </td> </tr> <tr> <th scope="row" class="indexCell"></th> <td>Keys</td> <td>3:51</td> <td><i style="font-size:24px" class="fa keys"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row" class="indexCell"></th> <td>Smoking</td> <td>5:12</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row" class="indexCell"></th> <td>Foo</td> <td>9:10</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> <tr> <th scope="row" class="indexCell"></th> <td>Bar</td> <td>10:45</td> <td><i style="font-size:24px" class="fa smoking"></i></td> <td><i class="fa fa-trash-o delete" aria-hidden="true"></i></td> </tr> </tbody> </table>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.