首页 > 解决方案 > 如何在不使用按钮或 tbody 的情况下从动态生成的表中单击一行来获取 HTML 表中单元格的值

问题描述

我希望能够单击一行中的任意位置并获取其第一个单元格的内容,无论我单击何处。请注意,这是一个动态生成的表,仅由<th><tr>元素<td>组成(no <tbody>),因此所述表中的所有行都没有id. 注释部分自行工作,为什么我不能从第一个单元格中获取文本?或者甚至只是该行的内容将是一个好的开始。我所在的函数中的任何地方的选择器有问题//trying to get the contents吗?我不知道这有什么问题。

//  Build HTML Table
function buildHtmlTable(portalData, tablename) {
    var columns = [];
    var headerTr$ = $('<tr/>');
    var n = 0;
    if (tablename == "order-table") {
        document.getElementById("dist-name").innerText = JSON.parse(JSON.stringify(portalData[0], null, 2))["Company Name"];
        n = 1;
    }
    for (var i = 0 ; i < portalData.length ; i++) {
        var rowHash = portalData[i];
        for (var key in rowHash) {
            if ($.inArray(key, columns) == -1) {
                columns.push(key);
                headerTr$.append($('<th/>').html(key));
            }
        }
    }
    $('#' + tablename).append(headerTr$);
    for (i = 0 ; i < portalData.length ; i++) {
        var row$ = $('<tr/>');
        for (var colIndex = n ; colIndex < columns.length ; colIndex++) {  // n is how many columns to drop, based on table name
            var cellValue = portalData[i][columns[colIndex]];
            if (cellValue == null) {
                cellValue = "";
            }
            row$.append($('<td/>').html(cellValue));
        }
        $('#' + tablename).append(row$);
    }

    // Drop unnecessary columns
    for(i = 0 ; i<n; i++) {
        $("#order-table").find('td,th').first().remove();
    }

    //Trying to get the contents
    $(function(){
        $("#order-table td").click(function() {     

            // var column_num = parseInt( $(this).index() ) + 1;
            // var row_num = parseInt( $(this).parent().index() );    

            // alert( "Row_num = " + row_num);   
            var column = $(this);
            var row = ($(this).parent());

            alert(row.innerText);
            alert(column.innerText);
        });
    });
}

标签: javascriptjqueryhtml-tablejquery-selectorsclick

解决方案


您可以将点击事件绑定到页面上的现有元素,并使用 DOM 导航获取第一个单元格的值。因此,例如,如果您的表格已经存在于页面上,并且您希望将点击事件绑定到动态添加的行,则可以引用该table元素:

$(document).ready(function() {
  $('table').on('click', 'tr', function() {
    var value = $(this).find('td:first-child').text();
   //do something with value
  });
});

演示

在您的情况下,您似乎正在将表格本身动态添加到页面中。在这种情况下,您可以绑定document并引用动态添加的表的 id:

$(document).ready(function() {
  $('document').on('click', '#order-table tr', function() {
    var value = $(this).find('td:first-child').text();
   //do something with value
  });
});

如果您希望在所有表格上发生此点击事件,您可以执行以下操作:

$(document).ready(function() {
  $('document').on('click', 'table tr', function() {
    var value = $(this).find('td:first-child').text();
   //do something with value
  });
});

推荐阅读