javascript - 为数组中的所有元素切换元素 onclick 的颜色
问题描述
我在 Javascript 数组中有一组 HTML 元素。我想为所有这些添加一个 onclick。单击时,元素将在 no class 和 class live之间切换。
const size={
x:10,
y:10
};
var matrix=[];
for(var i=[0, 0], rows=[]; i[0]<size.y; i[0]++){
rows.push(document.createElement("tr"));
document.querySelector("tbody").appendChild(rows[i[0]]);
matrix.push([]);
for(i[1]=0; i[1]<size.x; i[1]++){
matrix[i[0]][i[1]]=document.createElement("td");
rows[i[0]].appendChild(matrix[i[0]][i[1]]);
}
}//this bit works↑
for(var i=[0,0]; i[0]<matrix.length; i[0]++){
for(i[1]=0; i[1]<matrix[0].length; i[1]++){
matrix[i[0]][i[1]].onclick=function(){
if($(this).hasClass("live")){
$(this).removeClass("live");
}else{
$(this).addClass("live");
}
}
}
}
table{
border-collapse:collapse;
background-color:black;
}
td{
width:47.5px;
height:47.5px;
padding:0px;
border:2.5px solid gray;
}
td.live{
background-color:white;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
</tbody
</table>
解决方案
您可以使用Element.classList的.toggle( String [, force] ):
const size={
x:10,
y:10
};
var matrix=[];
for(var i=[0, 0], rows=[]; i[0]<size.y; i[0]++){
rows.push(document.createElement("tr"));
document.querySelector("tbody").appendChild(rows[i[0]]);
matrix.push([]);
for(i[1]=0; i[1]<size.x; i[1]++){
matrix[i[0]][i[1]]=document.createElement("td");
rows[i[0]].appendChild(matrix[i[0]][i[1]]);
}
}//this bit works↑
for(var i=[0,0]; i[0]<matrix.length; i[0]++){
for(i[1]=0; i[1]<matrix[0].length; i[1]++){
matrix[i[0]][i[1]].onclick=function(e){
this.classList.toggle('live');
}
}
}
table{
border-collapse:collapse;
background-color:black;
}
td{
width:47.5px;
height:47.5px;
padding:0px;
border:2.5px solid gray;
}
td.live{
background-color:white;
}
<table>
<tbody>
</tbody>
</table>
推荐阅读
- java - Android Studio - 尝试构建项目时出现 tools.jar 错误
- kubernetes - 如何保持新旧部署(Kubernetes / Openshift)
- google-cloud-platform - 如何在 Terraform 中引用现有的组织文件夹或其他资源(对于 GCP)
- javascript - 为什么 JavaScript `Intl.Collator.prototype.compare()` 方法会产生与传统 UTF-16 比较特殊字符不同的结果?
- android - 是否可以使用 Intent.ACTION_CREATE_DOCUMENT 将Extra() 添加到 Intent?
- wcf - 一个监听多个地址的 WCF 服务(仅限配置)
- android - 就 Android 版 Facebook 登录 SDK 而言,API 30 和其他较低的 API 级别有什么区别?
- node.js - Nodsjs 提供静态文件但在下载时更改文件名
- jquery - 每行只勾选一个复选框
- c# - 文件格式和扩展名不匹配。文件可能已损坏或不安全