Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery:如何在createdRow()回调中访问底层数据表?_Javascript_Jquery_Datatable - Fatal编程技术网

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