Javascript jquery:如何在createdRow()回调中访问底层数据表?
创建一行时,我想添加一个子行,其中包含一个Javascript jquery:如何在createdRow()回调中访问底层数据表?,javascript,jquery,datatable,Javascript,Jquery,Datatable,创建一行时,我想添加一个子行,其中包含一个,以便以后通过on进行填充。单击()+DataTable()+ajax。很简单。createdRow()回调似乎是一个很好的地方来做这件事。。。如果我能让它工作 createdRow()采用4个参数,如下所示 行-所创建行的HTML元素 数据-新行数据的纯ol'JSON dataIndex-表中的行 单元格-构成行的的DOM元素 这些都不是数据表或子对象。不仅如此,我似乎没有办法了解底层的元素。$(行).最近('table')和$(单元格[0])。最
,以便以后通过on进行填充。单击()
+DataTable()
+ajax
。很简单。createdRow()
回调似乎是一个很好的地方来做这件事。。。如果我能让它工作
createdRow()
采用4个参数,如下所示
-所创建行的HTML元素行
-新行数据的纯ol'JSON数据
-表中的行dataIndex
-构成行的单元格
的DOM元素
元素。$(行).最近('table')
和$(单元格[0])。最近('table')
似乎都没有返回任何内容,而$(行).parent()
也不起作用。似乎行还没有插入到表中
如果在调用createdRow()
时该行确实没有插入到表中,那么我想我只需要使用另一个回调,比如initComplete()
,并对行进行迭代。但是createdRow()
将是完美的,因为所有的数据都在args中,所以我希望我错过了一些简单的东西,并且createdRow()
可以正常工作
谢谢 您可以使用所示的方法之一从表本身中访问表的API对象。那么比如说,
$('#your_table_id_here').DataTable()
使用此选项,可以执行以下操作来创建子行:
$('#example').DataTable( {
"createdRow": function( row, data, dataIndex, cells ) {
var myTable = $('#example').DataTable();
myTable.row( dataIndex ).child( '<table><tr><td>some data</td></tr></table>' ).show();
}
} );
上面的示例假设table
是创建数据表时分配给数据表的变量:
var table = $('#example').DataTable( {
// your usual DataTable options here
} );
将子项添加到行中通常是在表处于打开状态时完成的,而不使用createdRow
选项。我认为这是处理诸如打开/关闭按钮(如果您需要)之类的事情的最简单方法
更新关于无法访问HTML表ID的评论 在
createdRow
回调函数中,您还可以使用this
作为选择器:var myTable=$(this).DataTable()代码>。在这种情况下,不需要知道表的ID
使用此选项,我前面的示例如下所示:
$('#example').DataTable( {
"createdRow": function( row, data, dataIndex, cells ) {
var myTable = $( this ).DataTable();
myTable.row( dataIndex ).child( '<table><tr><td>some data</td></tr></table>' ).show();
}
} );
$('#示例')。数据表({
“createdRow”:函数(行、数据、数据索引、单元格){
var myTable=$(this.DataTable();
行(dataIndex).child('some data').show();
}
} );
您能给我们看一下您的代码吗谢谢,但是我在createdRow()中没有表id的引用。
。我的初始页面是一个
的
,每个页面在$().ready()
期间都会转换为一个数据表,并通过ajax异步填充。我的计划是createdRow()
在每个返回表的每个返回行中添加一个子项。从概念上讲,这是执行此操作的最佳位置,而不是像您提到的示例中那样在.click()
处理程序中执行此操作。我很感激有人指出解决办法,但在这种情况下,我真正感兴趣的是createdRow()
中是否有可能。谢谢。顺便说一句,我目前的解决办法是循环调用initComplete()
callback中的所有行,这还不错。我不习惯对象上的回调使引用源对象变得如此困难,但在本例中可能就是这样。明白。你可能应该用这些额外的信息更新你的问题。如果有帮助,您可以使用任何有效的jQuery选择器来代替id
值-例如,您可以使用所有表通用的类名:var allMyTables=$('.some_class_name').DataTable()代码>。看见这可能对您有帮助,也可能没有帮助-这可能取决于您的表转换为DataTables对象的具体过程。我在回答中又添加了一个注释-以防万一它也会有帮助(但我知道这不是您需要的)。注释做到了:)$(这)
正是我要找的。我知道一定有什么。谢谢
$('#example').DataTable( {
"createdRow": function( row, data, dataIndex, cells ) {
var myTable = $( this ).DataTable();
myTable.row( dataIndex ).child( '<table><tr><td>some data</td></tr></table>' ).show();
}
} );