5

我有一个从数据库填充的 HTML 表。以及一个将客户端点击事件添加到每个表行的 jquery 函数。

$(function() {
    $(".TreeTable tr").each(function(index) {
        $(this).click(function() {
            alert($(this).text());
        });
    });
});

现在我可以通过单击任何行来获得完整的行值。现在我需要访问该函数中的单个单元格值。谁能告诉我如何在行点击时获得单个单元格的值。

4

5 回答 5

8

看看这个:

$(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]':'') );
        });
    });
});

这是您可以测试的代码:

http://jsfiddle.net/7PWu5/

于 2013-03-25T14:09:57.937 回答
5

首先,不需要.each- 该.click方法将绑定到每个传递的元素,而不仅仅是第一个。

其次,在表格行元素上有一个特定的属性cells,可以直接访问行的单元格:

$('.TreeTable').on('click', 'tr', function() {
    var td = this.cells[0];  // the first <td>
    alert( $(td).text() );
});

请注意事件委托的使用——事件处理程序实际上是在整个表上注册的,然后依靠事件冒泡告诉您单击了哪一行(并从中获取单元格文本)。

于 2013-03-25T13:15:24.740 回答
1

您不需要显式迭代 using.each()将事件处理程序绑定到一组元素,事件绑定函数将为您隐式执行此操作。由于事件传播,您可以将事件处理程序绑定到<tr>并使用event.target(原始元素)来获取对实际单击的元素()的引用<td>

$(function() {
    $('.TreeTable tr').click(function(event) {
        console.log(this); // the <tr>
        console.log(event.target); // the <td>
    });
});

这是假设您对<td>单击的特定元素感兴趣。

于 2013-03-25T13:16:52.670 回答
1

我更喜欢这个:

$('.TreeTable').on('click', 'td', function() { // td not tr
     alert($(this).text());
});
于 2013-03-25T13:16:17.260 回答
1

您可以使用获取第二个单元格

 alert($('td', this).eq(1).text());

通常,为了获得更可靠的代码,您更愿意向所需的单元格添加一个类,以便您可以使用

 alert($('td.myclass', this).text());

如果您想要获取单击的单元格,只需将事件绑定到单元格:

$(".TreeTable  td").click(function() { // td not tr
     alert($(this).text());
});

请注意,循环遍历 jQuery 集合以绑定事件是没有用的,正如您从我上一个代码中看到的那样。

于 2013-03-25T13:12:28.230 回答