Javascript jquery Datatables复选框获取所有选中行

Javascript jquery Datatables复选框获取所有选中行,javascript,jquery,checkbox,datatables,Javascript,Jquery,Checkbox,Datatables,我有一个datatable,在其中我试图获取所有选中的行。此表具有行分组,并使用来自的复选框插件。我试过上面列出的代码,但没有成功。无论选择了什么,我都只返回第一条记录。我用于的代码如下所示: var tbl; $(document).ready(function (){ tbl = $('#example').DataTable({ columnDefs: [{ targets: 0,

我有一个datatable,在其中我试图获取所有选中的行。此表具有行分组,并使用来自的复选框插件。我试过上面列出的代码,但没有成功。无论选择了什么,我都只返回第一条记录。我用于的代码如下所示:

var tbl;
$(document).ready(function (){
          tbl = $('#example').DataTable({
            columnDefs: [{
                targets: 0,
                data: 2,
                'checkboxes': {
                    'selectRow': true
                }
            },
            { "visible": false, "targets": 1 }],
            select: {
                style: 'multi'
            },
            order: [[1, 'asc']],
            iDisplayLength: 10,
            drawCallback: function () {
                var api = this.api();
                var rows = api.rows({ page: 'current' }).nodes();
                var last = null;

                api.column(1, { page: 'current' }).data().each(function (group, i) {
                    if (last !== group) {
                        $(rows).eq(i).before(
                            '<tr class="group"><td colspan="6">' + group + '</td></tr>'
                        );
                        last = group;
                    }
                });
            }
        });
});

function getSelected(){
    alert(tbl.columns().checkboxes.selected().length);
}
我这里有密码。我不确定它们是否在复选框和行分组之间相互关联?请告诉我哪里出了问题


注意:复选框基于gyrocode的插件。数据表的版本是1.10.12

我做了一个快速检查,Eric Guan是正确的。我将发布一段代码片段:

function getSelected() {
   var selectedIds = tbl.columns().checkboxes.selected()[0];
   console.log(selectedIds)

   selectedIds.forEach(function(selectedId) {
       alert(selectedId);
   });
}
见:

我刚刚注意到您有重复的学生Id,这可能会导致您正在使用的库出现意外行为。如果学生Id是唯一的,上面提供的代码应该可以工作。

可以工作并经过测试


我来不及回答这个问题了。但我的回答可以帮助社区中的其他人

//datatable has to be initialized to a variable
var myTable = $('#calltable').dataTable();

//checkboxes should have a general class to traverse
var rowcollection = myTable.$(".call-checkbox:checked", {"page": "all"});

//Now loop through all the selected checkboxes to perform desired actions
rowcollection.each(function(index,elem){
    //You have access to the current iterating row
    var checkbox_value = $(elem).val();
    //Do something with 'checkbox_value'
});

我希望这会有所帮助。

简单答案-使用table.rows'.selected'或table.rows{selected:true}

var count = $('#datatable').DataTable().rows( '.selected' ).count();

var checked_rows = $('#datatable').DataTable().rows( '.selected' ).data();

for(var i=0; i<checked_rows.length; i++)
{
  console.log( checked_rows[i] );               
}

文档链接:

那么问题出在哪里呢?您的问题不太清楚。如果您选择console.logtbl.columns.checkboxes.selected,您可以看到有一个数组包含唯一的、选定的学生ID。如果每行使用不同的ID,我可以看到它正在工作。length属性不是您想要的。您需要改用column0.checkbox.selected。此外,表中有重复的ID,这会影响总计数。这同样有效。感谢您的澄清。我是上述插件的作者。关于重复ID的正确答案和要点。但是,推荐的方法是使用column0.checkbox.selected(如果只访问一列数据),尽管您的代码也可以工作。我不知道的是[0]。感谢您的澄清。请参阅此jsbin以获取数据表所有页面中的行节点和所有选中行。虽然这可能会回答这个问题,但您应该在您的答案中包含一些关于这段代码如何回答这个问题的解释,以便为将来的用户提供上下文。代码块本身对以后遇到相同问题的人不会立即有用。此代码解决了我在所有页面上无法获取复选框的所有ID的问题。仅说明上述代码中显而易见的[.call checkbox]是一个类,在生成表数据时需要追加该类。
var count = $('#datatable').DataTable().rows( '.selected' ).count();

var checked_rows = $('#datatable').DataTable().rows( '.selected' ).data();

for(var i=0; i<checked_rows.length; i++)
{
  console.log( checked_rows[i] );               
}