如何在这个JavaScript生成的表格中使表格单元格可以单击?
我想我在script标记中放置注解的地方就是我需要修改代码的地方。
这段代码到目前为止是有效的:
function createTable(data) {
var table = document.createElement("table");
table.style.border = "1px solid #ffcc33";
var thead = document.createElement("thead");
thead.style.padding = "5px";
var tr = document.createElement("tr");
for (var i = 0;i < data[0].length; i++){
var th = document.createElement("th");
th.style.border = "2px solid #ff0000";
var newText = document.createTextNode(data[0][i]);
// maybe an onclick goes here!
th.appendChild(newText);
tr.appendChild(th);
}
thead.appendChild(tr);
table.appendChild(thead);
var tbody = document.createElement("tbody");
for(var i=1;i<data.length;i++){
var tr = document.createElement("tr");
for(var j=0;j<data[i].length;j++){
var td = document.createElement("td");
td.style.padding = "5px";
td.style.border = "2px solid #00ff00";
var newText = document.createTextNode(data[i][j]);
td.appendChild(newText);
tr.appendChild(td);
}
tbody.appendChild(tr);
}
table.appendChild(tbody); return table;
}
window.onload = function() {
var table = createTable ([
["1","2","3","4"],
["One","Two","Three","Four"],
["Un","Deux","Trois","Quatre"],
["eins","zwei","drei","vier"]
]);
document.body.appendChild(table)
}
3条答案
按热度按时间b4lqfgs41#
你反对jquery吗?
您可以尝试将jquery添加到标头并添加
pnwntuvh2#
嗯,是的,您 * 可以 * 将
click
连接到您放置注解的每个th
元素上:......但最好的办法可能是使用事件委托。在
thead
元素上挂钩click
(因为您只需要th
):...然后查看传入
clickHandler
的事件对象的target
属性,这将是实际发生点击的元素(thead
的后代,或者thead
本身)。如果您只关心
th
点击,处理程序可能如下所示:同样的技术可以非常方便地处理对表体中单元格的点击,显然,您可以在
tbody
或table
本身上捕获这些点击,无论您希望如何处理它。请注意,如果您可以使用一个像样的JavaScript DOM库,例如jQuery、YUI、Closure或any of several others,那么这会简单得多。
例如,jQuery中的事件委托示例:
无需IE检查,委托处理已为您完成。
yvt65v4c3#
我认为在动态DOM的情况下,事件委托更好,并且将DOM和eventHandler分离也更好。
因此,您可以将EventHander添加到表(或目标DOM)中,然后当事件发生时,您可以检查事件发生位置,并根据DOM选择操作。
参见this。