[英]javascript table column remove when click table
It can be awkward because English is not my first language.这可能会很尴尬,因为英语不是我的第一语言。
I have a task to write pure javascript code that deletes the clicked column when the table is clicked.我的任务是编写纯 javascript代码,当单击表时删除单击的列。 Unfortunately I can't use jquery.
不幸的是,我不能使用 jquery。
let cells = document.querySelectorAll("table td");
is the code I basically need to use.是我基本上需要使用的代码。
window.onload = function () {
function click(e) {
let cells = document.querySelectorAll("table td");
let index = e.target.cellIndex;
cells.forEach((td, i) => {
if (td.cellIndex === index) {
td.parentElement.querySelectorAll("td")[index].remove();
}
})
}
// set onclick event for the head of each column
document.querySelectorAll('tr > td').forEach(td => td.onclick = click)
}
In my source, I delete all the columns to the right of where I clicked to see where the problem is.在我的源代码中,我删除了单击以查看问题所在右侧的所有列。
Only the column of the clicked td should be deleted.仅应删除单击的 td 的列。
I don't know where the problem is or how to fix it.我不知道问题出在哪里或如何解决。
You can select the cells you want to remove via the nth-child
selector, based on cellIndex
.您可以 select 基于
cellIndex
通过nth-child
选择器删除要删除的单元格。 The below table demonstrates this:下表说明了这一点:
function click(e) { let index = e.target.cellIndex; document.querySelectorAll(`tr td:nth-child(${index + 1})`).forEach(cell => cell.remove()); } // set onclick event for the head of each column document.querySelectorAll('tr > td').forEach(td => td.onclick = click)
<table border="1"> <tr><td>Column 1</td><td>Column 2</td><td>Column 3</td><td>Column 4</td><td>Column 5</td></tr> <tr><td>Column 1</td><td>Column 2</td><td>Column 3</td><td>Column 4</td><td>Column 5</td></tr> <tr><td>Column 1</td><td>Column 2</td><td>Column 3</td><td>Column 4</td><td>Column 5</td></tr> <tr><td>Column 1</td><td>Column 2</td><td>Column 3</td><td>Column 4</td><td>Column 5</td></tr> <tr><td>Column 1</td><td>Column 2</td><td>Column 3</td><td>Column 4</td><td>Column 5</td></tr> </table>
Collect all tr.收集所有 tr。 Apply click eventListener to every single tr.
将 click eventListener 应用于每个 tr。 The EventHandler collect all td's by column index.
EventHandler 按列索引收集所有 td。 Then use remove() function.
然后使用 remove() function。
document.querySelectorAll('tr').forEach((c) => { c.addEventListener('click', (e) => { document.querySelectorAll('tr td:nth-child(' + (e.target.cellIndex + 1) + ')').forEach((td) => { td.remove(); }); }) });
table { border: 1px solid #000; }
<table> <tr><td>Col 1</td><td>Col 2</td><td>Col 3</td><td>Col 4</td></tr> <tr><td>Col 1</td><td>Col 2</td><td>Col 3</td><td>Col 4</td></tr> <tr><td>Col 1</td><td>Col 2</td><td>Col 3</td><td>Col 4</td></tr> <tr><td>Col 1</td><td>Col 2</td><td>Col 3</td><td>Col 4</td></tr> <tr><td>Col 1</td><td>Col 2</td><td>Col 3</td><td>Col 4</td></tr> <tr><td>Col 1</td><td>Col 2</td><td>Col 3</td><td>Col 4</td></tr> </table>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.