javascript - 如何在以后的点击事件中访问动态创建的文本节点的值?
问题描述
我有一个 Javascript 项目。这是一个乘法表,当单击每个单元格时,它应该显示该单元格的结果。
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8"/>
<style>
.tdstyles {
width: 50px;
height: 50px;
text-align: center;
}
</style>
</head>
<body>
<div id="Holder"></div>
</body>
</html>
<script type="text/javascript">
var m;
window.onload = function () {
var table = document.createElement('table');
table.border = 1;
table.cellPadding = 0;
table.cellSpacing = 0;
for (var i = 1; i <= 10; i++) {
var tr = document.createElement('tr');
for (var j = 1; j <= 10; j++) {
m = i*j;
var td = document.createElement('td');
var newContent = document.createTextNode(m);
td.className = "tdstyles";
tr.appendChild(td);
td.appendChild(newContent);
document.getElementsByTagName("td").innerHTML = m;
td.onclick = function () {
console.log();
};
var a = Math.round(Math.random() * 255);
var b = Math.round(Math.random() * 255);
var c = Math.round(Math.random() * 255);
td.style.backgroundColor = "rgb(" + a + "," + b + "," + c + ")";
// myFunction();
}
table.appendChild(tr);
Holder.appendChild(table)
}
};
</script>
如何在循环中保存该 TextNode 并在单击该 td 时使用它?
解决方案
您应该在每次内部迭代的闭包中保存对文本的引用,以便以后可以访问它。另请注意,textContent
如果元素的唯一子节点将成为文本节点,则将其分配给元素可能要容易得多。
for (let j = 1; j <= 10; j++) {
const text = i * j;
const td = tr.appendChild(document.createElement('td'));
td.textContent = 'text';
td.className = "tdstyles";
td.onclick = function() {
console.log(text);
};
// ...
请注意,我使用的是const
而let
不是var
- 这非常重要。var
具有函数作用域并且被提升,这很容易导致混淆,尤其是当您有任何异步代码时;const
并且let
更加直观。
推荐阅读
- javascript - 将图像上传到本地文件夹(索引)时出现此错误:7146 crbug/1173575,不推荐使用非 JS 模块文件
- arrays - 如何使用 CopyMemory 复制二维数组?
- amazon-web-services - 使用云形成模板创建 DynamoDB 时面临的问题。以及如何在 YAML CF 中定义属性 Boolean、List 和 Map
- vodapay-miniprogram - 为什么我无法从 Vodapay 授权/applyToken 端点获取访问令牌并返回“一般业务失败”响应?
- prometheus - 在 Grafana 中使用 Prometheus irate() 函数时如何解决数据解析问题?
- pyspark - 无法从 spark 数据框中导出数据
- python - "detail": "未提供身份验证凭据。" 一般视图
- python - 创建独立的应用程序,可以选择浏览多个 excel 文件并相应地生成绘图
- xamarin.forms - xamarin.forms MediaElement 视频从 android 后台返回时重新启动
- r - 在以列表为环境的函数中替换