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

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

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

任何帮助赞赏

您可以通过替换来解决您的问题

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

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

received_table.fnGetPosition()调用也需要相同的语法

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

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

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

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

如果上面没有找到你,请尝试使用filter方法来减少匹配元素的集合。

@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  respectively 

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

任何帮助深表感谢

编辑
得到它这样工作(不知道我以前做错了什么)

  "aoColumnDefs": [ { "fnRender": function(oObj) { return ''; }, "bSortable": false, "aTargets": [0] }, 

和function

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

下面的代码将有所帮助,

 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 });