我有一个从数据库填充的HTML表。 还有一个jquery函数,它将客户端点击事件添加到每个表行。
$(function() {
$(".TreeTable tr").each(function(index) {
$(this).click(function() {
alert($(this).text());
});
});
});
现在,我可以通过单击任何行来获取完整的行值。 现在我需要访问该函数中的单个单元格值。 任何人都可以告诉我如何在行点击中获得单个单元格值。
答案 0 :(得分:7)
看看这个:
$(document).ready(function(){
$('.TreeTable tr').click(function(e){
var cell = $(e.target).get(0); // This is the TD you clicked
var tr = $(this); // This is the TR you clicked
$('#out').empty();
$('td', tr).each(function(i, td){
$('#out').html(
$('#out').html()
+'<br>'
+i+': '+$(td).text()
+ (td===cell?' [clicked]':'') );
});
});
});
这是工作代码: http://jsfiddle.net/VbA9D/
如果您可以点击表格单元格中的其他HTML元素,下面的示例将更好用:
$(document).ready(function(){
$('.TreeTable tr').click(function(e){
var cell = $(e.target).get(0); // This is the TD you clicked
if(cell.nodeName != 'TD')
cell = $(cell).closest('td').get(0);
var tr = $(this); // This is the TR you clicked
$('#out').empty();
$('td', tr).each(function(i, td){
$('#out').html(
$('#out').html()
+'<br>'
+i+': '+$(td).text()
+ (td===cell?' [clicked]':'') );
});
});
});
以下是您可以测试的代码:
答案 1 :(得分:5)
首先,不需要.each
- .click
方法将绑定到每个传递的元素,而不仅仅是第一个元素。
其次,表行元素上有一个名为cells
的特定属性,可以直接访问行的单元格:
$('.TreeTable').on('click', 'tr', function() {
var td = this.cells[0]; // the first <td>
alert( $(td).text() );
});
请注意事件委托的使用 - 事件处理程序实际上是在整个表上注册的,然后依赖事件冒泡来告诉您单击了哪一行(并从中获取单元格文本)。
答案 2 :(得分:1)
您可以使用
获取第二个单元格 alert($('td', this).eq(1).text());
通常,对于更可靠的代码,您更愿意在所需的单元格中添加一个类,以便您可以使用
alert($('td.myclass', this).text());
如果你想要获得被点击的单元格,只需将事件绑定到单元格:
$(".TreeTable td").click(function() { // td not tr
alert($(this).text());
});
请注意,循环遍历jQuery集合来绑定事件是没用的,正如您在上一段代码中所看到的那样。
答案 3 :(得分:1)
我更喜欢这个:
$('.TreeTable').on('click', 'td', function() { // td not tr
alert($(this).text());
});
答案 4 :(得分:1)
您不需要使用.each()
显式迭代将事件处理程序绑定到一组元素,事件绑定函数将隐式为您执行此操作。由于事件传播,您可以将事件处理程序绑定到<tr>
并使用event.target
(原始元素)来获取对实际单击的元素的引用(<td>
) :
$(function() {
$('.TreeTable tr').click(function(event) {
console.log(this); // the <tr>
console.log(event.target); // the <td>
});
});
假设您对所点击的特定<td>
元素感兴趣。