假设我有一个动态矩阵(使用tr
和td
构建)
----------------------
1 | 2 | 3 | 4 | 5
----------------------
6 | 7 | 8 | 9 | 10
----------------------
11 | 12 | 13 | 14 | 15
----------------------
我要alert
单击的号码。
我不想为每个td
添加一个事件侦听器,或在table
上设置一个事件侦听器,并读取innerText
的dataset
或target
。基本上,我不想为此依赖DOM。
在有限制的情况下,最有效的方法是什么?下面是我尝试过的内容。
function createTable() {
var table = document.createElement('table'),
cells = '',
rows = '',
i,
j
for (i = 0; i < 50; i++) {
for (j = 0; j < 50; j++) {
cells += '<td>' + ((50 * i) + (j + 1)) + '</td>'
}
rows += '<tr>' + cells + '</tr>'
cells = ''
}
table.innerHTML = rows
table.addEventListener('click', function (event) {
var cellIndex = event.path[0].cellIndex,
rowIndex = event.path[1].rowIndex
alert(50 * rowIndex + (cellIndex + 1))
})
document.body.insertAdjacentElement('beforeend', table)
}
document.addEventListener('DOMContentLoaded', createTable)
您可以将ID添加到表中,并将事件侦听器添加到表中
function createTable() {
var table = document.createElement('table'),
cells = '',
rows = '',
i,
j;
table.id = 'test';
for (i = 0; i < 50; i++) {
for (j = 0; j < 50; j++) {
cells += '<td>' + ((50 * i) + (j + 1)) + '</td>'
}
rows += '<tr>' + cells + '</tr>'
cells = ''
}
table.innerHTML = rows
document.body.insertAdjacentElement('beforeend', table);
document.getElementById('test').addEventListener('click', function(e) {
console.log(e.target.innerHTML)
})
}
document.addEventListener('DOMContentLoaded', createTable);
td {
cursor: pointer;
}