如何从jQuery DataTable中获取包含已选复选框的行

5

我需要从一个Jquery Datatables的隐藏列中获取值,这个值对应被选中的复选框(在第一列可见)的行。到目前为止,我已经得到了:

bodytable$ = $('#dataTable').dataTable({
    "bJQueryUI" : true,
    "bPaginate" : true,

    "bSort" : false,
    "bFilter": false,       
    "aoColumns": [{"bVisible": false},
                  {"bVisible": true},
                  {"bVisible": true},
                  {"bVisible": true}],

    "oLanguage": {
        "sEmptyTable": '',
        "sInfoEmpty": '',
        "sZeroRecords": ''
    }
});

我正在使用以下代码从隐藏列中获取值:

    var checkIds = [];

    $('input[type="checkbox"]:checked', bodytable$.fnGetNodes()).each(function(i){
        var tr = $(this).closest('tr');
        var rowData = bodytable$.fnGetData(tr);
        checkIds.push(rowData[0]);
    });
    alert(checkIds);

这个问题出现在以下代码行:

var rowData = bodytable$.fnGetData(tr);

在Firefox调试中会出现错误信息:TypeError: a.nodeName is undefined。

我必须通过DataTable API进行操作,因为隐藏的列实际上不会出现在加载到浏览器中的html中。并且,因为我想在所选复选框不在同一页时也能选择数据值。

继续mainguys的回答,并使用CSS隐藏列(而不是使用bVisible属性),我现在可以用以下方法得到我想要的结果:

    var checkIds = [];
    $('input[type="checkbox"]:checked', bodytable$.fnGetNodes()).each(function(i){
        var tr = $(this).closest('tr');
        checkIds.push($(tr).find('td:eq(0)').text());
    });
    alert(checkIds);
1个回答

5

我找到了一个技巧来实现这个。

不要隐藏该列,只需为其分配一个带有display:none属性的类即可。

"aoColumns": [{
  "bVisible": true
}, {
  "bVisible": true, sClass:"hideme"
}, {
  "bVisible": true
}]

CSS:

.hideme {
  display:none;
}

现在可以使用以下方法来查找它们:
   var checkIds = [];
    bodytable$.$('tr').each(function(index,rowhtml){
      var checked= $('input[type="checkbox"]:checked',rowhtml).length;
      if (checked==1){
        checkIds.push($('.hideme',rowhtml).text());
      }
    });
    alert(checkIds);

是的,我知道这不太优雅,但它有效。 在这里试一下


您真是个天才!诀窍就像您所说的那样,使用CSS隐藏列而不是dataTable bVisible属性。现在该列仍然存在于HTML中,我已经编辑了我的问题并给出了最终解决方案。 - user497087

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接