这是静态页面的纯 Javascript 解决方案,它将事件侦听器附加到tr
并拦截其子级的单击事件。的内容tr
可以是动态的。
Array.prototype.forEach.call(document.getElementsByTagName("table"), function (table) {
Array.prototype.forEach.call(table.getElementsByTagName("tr"), function (tr) {
tr.addEventListener("click", function (evt) {
var children = this.children,
length = children.length;
if (length && children[length - 1] === evt.target) {
alert(children[0].firstChild.nodeValue);
}
}, false);
});
});
在jsfiddle 上
用 jquery 术语来说是
$("table tr").on("click", function (evt) {
var target = $(evt.target);
if (target.parent().children().last().get(0) === evt.target) {
alert(target.parent().children().first().text());
}
});
在jsfiddle 上
或者不是为每个tr
元素设置一个事件侦听器(“冒泡”),您还可以使用事件“冒泡”并将其一直移动到document
(jquery 调用事件委托,jquery.on的那些),这将允许相当如果您在表中添加和删除行,甚至是整个表,则为动态系统。
document.addEventListener("click", function (evt) {
var target = evt.target;
if (target.nodeName === "TD" && target.parentNode.children[target.parentNode.children.length - 1] === target) {
alert(target.parentNode.children[0].firstChild.nodeValue);
}
}, false);
在 jsfid文件上
或者使用 jquery 委托
$(document).on("click", "td", function (evt) {
var target = $(evt.target);
if (target.parent().children().last().get(0) === evt.target) {
alert(target.siblings().first().text());
}
});
在jsfiddle 上