通过行内的按钮单击访问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 });