【问题标题】:Select All rows in Jquery Datatables选择 Jquery 数据表中的所有行
【发布时间】:2014-07-28 16:06:20
【问题描述】:

我有一个数据表,我可以在其中选择多行 onclick,但是如何在单击按钮时选择所有行,同时所有行都通过选择突出显示(您能否给出当前页面的选择示例和所有页面)。我已经编写了一个代码来获取多个选定的值。

复选框也可以,但是如何获取选定的值。

下面是单选和多选的代码。

 var oTable = $("#example").dataTable();

    $('#example tbody').on('click', 'tr', function() {
                        $(this).toggleClass('selected');

    });

在按钮提交时获取选定值的代码。

var row = oTable.rows('.selected').data();

var jsonArr = "[";

        if(row != null && row.length){

            for (var i = 0; i < row.length; i++) {
                var row1 = row[i]; // this will give me one row details
                        // row1[0] will give me column details
                        jsonArr = jsonArr + "{\"ID\":" + row1[0] + "},";

                }   
             jsonArr = jsonArr + "]";

【问题讨论】:

  • 嗨,我真的很想知道我的投票出错了没有像全选一样点击所以我问了一些例子。我得到的只是输入复选框全选。

标签: jquery datatables


【解决方案1】:

TableTools extension 可能会对您有所帮助。有一个带有 select_all 和 select_none 按钮的 example,它们适用于所有页面。

一个默认限制是 select_all 将忽略当前过滤,但这很容易使用下面的代码解决。为 fnSelectAll 提供“true”参数可启用过滤器感知选择。

tableTools: {
    sRowSelect: 'multi',
    aButtons: [
        {
            sExtends: 'select_all',
            sButtonText: 'Select All',
            fnClick: function (nButton, oConfig, oFlash) {
                TableTools.fnGetInstance('example').fnSelectAll(true);
            }
        }
    ]
}

【讨论】:

  • 我有一些如何手动解决我的目的。但我一定会尝试您的解决方案并在发布代码时再次发布
  • 我也尝试了以下方法,但很快证明它是不可扩展的。它的问题是,当您执行 $('.case') 时,您只选择数据表创建的复选框,通常只有第 1 页。如果您只是单击所有页面,然后按下标题复选框,则只有那么它实际上会选择所有页面上的所有内容。
  • @pise,除了我上面提到的,我放弃了为此创建手动解决方案。结果证明,仅使用 TableTools 就容易多了。但是如果数据量比较小,也可以用javascript处理复选框。
  • tableTools 显然已被弃用。现在需要 Buttons 和 Select 扩展。\
【解决方案2】:

根据doc,有一个内置函数。无需额外编码,

$(document).ready(function() {
    $('#example').DataTable( {
        dom: 'T<"clear">lfrtip',
        tableTools: {
            "sRowSelect": "multi",
            "aButtons": [ "select_all", "select_none" ]
        }
    } );
} );

您将需要在 doc 中定义的 JS 文件,并且他们错过了包含以下相关 CSS 文件的 JS 文件

这就是全部。

【讨论】:

    【解决方案3】:

    感谢您的帮助。但是有些我是如何手动选择全部的,唯一的漏洞是,如果我选择标题复选框,所有行复选框都将被选中,但是当我们进入下一页时,例如:第 2 页标题复选框将被选中并且再次选择所有页面没有 2 行复选框我必须取消选中并选中标题复选框。

    我做了什么:

    我添加了输入类型 checbox thead tr 和 tbody tr 并为所有子输入提供了 class='case'。单击全选时调用函数以选择/取消选择子行

    <thead>
         <tr>
           <th><input type='checkbox' id='selectall'/></th>
           <th>Patient Name</th>
         </tr>
    </thead>
    
    <tbody>
     <tr>
        <td class style='text-align: center;'><input type='checkbox' class='case' name='case'id = '"item.uid+"_I' /></td>
        <td>"+item.name+"</td>
      <tr>
    </tbody>
    
    
    // function to select/deselect all input checkbox
    
    to check uncheck all input box
    $('#selectall').click(function(event) {  //on click
    
        if(this.checked) { // check select status
              $('.case').each(function() { //loop through each checkbox
              this.checked = true;  //select all checkboxes with class "checkbox"   
              $(this).closest("tr").addClass("selected");              
         });
         }else{
               $('.case').each(function() { //loop through each checkbox
               this.checked = false; //deselect all checkboxes with class "checkbox"
               $(this).closest("tr").removeClass("selected");
         });        
        }
    });
    
    
    // select/deselect function if single row is selected
    $('#patientdata tbody').on('click', 'tr', function() {
        var rowID = this.id;
        if ( $(this).hasClass('selected') ) {
          $(this).removeClass('selected');
            $('#'+rowID+"_I").attr('checked', false);
            }
            else {
                  $(this).addClass('selected');
                   $('#'+rowID+"_I").attr('checked', true);
                }
            });
    

    谢谢

    【讨论】:

    • 它会在下一页继续选择吗?
    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2018-07-06
    相关资源
    最近更新 更多