通过一行中的按钮单击访问DataTable中的数据

时间:2013-03-15 16:36:13

标签: jquery datatables

我可以通过以下简单方法访问数据行:

$('#received-body tr').click( function(){
    aData = received_table.fnGetData(this);
    selected_received_id = aData[0];
    alert( selected_received_id );
});

但我无法通过其中一行中名为.received-update的按钮访问它们:

$('#received-body .received-update').click( function(){
    alert( 'update' ); // works
    aData = received_table.fnGetData( $(this).parents('tr')); // fails
    selected_received_id = aData[0];
    alert( 'update:' + selected_received_id );                      
});

任何帮助表示赞赏

5 个答案:

答案 0 :(得分:4)

您可以通过替换

来解决您的问题
    aData = received_table.fnGetData($(this).parents('tr'));

    aData = received_table.fnGetData($(this).parents('tr')[0]);


调用received_table.fnGetPosition()

时也需要相同的语法

答案 1 :(得分:1)

下面的代码将有所帮助,

var table = $('#tableID').DataTable();
var row_data;
$('#tableID tbody').on( 'click', 'button', function () {
    row_data = table.row( $(this).parents('tr') ).data();
    console.log(row_data); // you will get the row data
});

答案 2 :(得分:0)

您可能需要使用最接近的parents()可能会提供超过一行。最接近第一个匹配DOM层次结构。

aData = recieved_table.fnGetData($(this).closest('tr')); // fails

答案 3 :(得分:0)

aData = recieved_table.fnGetData($(this).parent('tr')); 

请尝试.parent()而不是.parents(),因为.parents()获取当前匹配元素集中每个元素的父级。 .parent()只有在tr是tr的直接子节点时才有效。在这种情况下,.closest()将是理想的,如下所示。

aData = recieved_table.fnGetData($(this).closest('tr'));

如果上述方法无法解决问题,请尝试filter方法来减少匹配元素的设置。

答案 4 :(得分:0)

@Stephen Brown,如果你找到了如何获得价值的话,请你提供解决方案。我有完全相同的问题。我已经尝试过这篇文章的所有方法,但没有运气。我有以下代码。

   "fnDrawCallback": function() {
        $(".select_row ").click(function(e){
            dataId = $(this).data("id");
            tr=$(this).closest("tr")[0];
            getSelected(tr, true);
        }); 
    }

,函数是(studentDataTable是数据表)

    function getSelected(tr, tableLoaded){
        console.log($(tr));
        console.log(tr);            
        if (tableLoaded){
             data = studentDataTable.fnGetPosition($(tr));
        }
    }

console.log打印以下内容

  Object[tr.even]  and <tr class="even"> respectively

我尝试了$(tr),tr和许多其他方法,但它总是抛出错误 TypeError:a.nodeName未定义 ... ta [d]!== m?c.aoData [d] ._ aData:null} return Y(c)}; this.fnGetNodes = function(a){var b ...

非常感谢任何帮助

修改
得到它的工作方式(不知道我之前做错了什么)

      "aoColumnDefs": [
                 { "fnRender": function(oObj) {
                            return '<input  type="checkbox" onClick=getSelected(this);  data-id="' + oObj.aData.id + '" value="' + oObj.aData.id + '" />';
                        },
                "bSortable": false,
                "aTargets": [0]
                 },

和功能

    function getSelected(checkbox){ 
         console.log($(checkbox));
         if ($(checkbox).is(':checked')) {
              tr=$(checkbox).closest("tr")[0];
              console.log(tr);
              data = studentDataTable.fnGetData(tr);
              console.log(data['groupsList']);
            }
    }