我们得到一个表格,在其中选择一个单元格并为其指定一个具有某种颜色的类。必须确保所选单元格周围的任何单元格都不能被单击。我足够聪明,可以通过 nextsibling 和 previousibling 来实现这一点,即使对于前一行和后续行也是如此),但是我怎样才能使顶部和底部单元停用.... pupupu)
let tds = document.querySelectorAll("td");
for (const td of tds) {
td.addEventListener("click", function () {
if(!this.classList.contains('active'))
this.classList.add('active')
if (this.previousElementSibling != null) {
this.previousElementSibling.classList.add("diactive");
} else {
if (this.parentElement.previousElementSibling != null)
this.parentElement.previousElementSibling.lastElementChild.classList.add(
"diactive"
);
}
if (this.nextElementSibling != null) {
this.nextElementSibling.classList.add("diactive");
} else {
if (this.parentElement.nextElementSibling != null)
this.parentElement.nextElementSibling.firstElementChild.classList.add(
"diactive"
);
}
});
}
table {
width: 100%;
margin-bottom: 20px;
border: 1px solid black;
border-collapse: collapse;
}
table tr {
font-weight: bold;
padding: 5px;
border: 1px solid black;
}
table td {
border: 1px solid black;
padding: 5px;
height: 40px;
}
.active{
background-color: aqua;
}
.diactive{
pointer-events: none;
}
<table>
<tr>
<td data-col="0"></td>
<td data-col="1"></td>
<td data-col="2"></td>
<td data-col="3"></td>
<td data-col="4"></td>
</tr>
<tr>
<td data-col="0"></td>
<td data-col="1"></td>
<td data-col="2"></td>
<td data-col="3"></td>
<td data-col="4"></td>
</tr>
<tr>
<td data-col="0"></td>
<td data-col="1"></td>
<td data-col="2"></td>
<td data-col="3"></td>
<td data-col="4"></td>
</tr>
<tr>
<td data-col="0"></td>
<td data-col="1"></td>
<td data-col="2"></td>
<td data-col="3"></td>
<td data-col="4"></td>
</tr>
</table>
我会建议这个选项...