jQuery.dataTable()如何隐藏行?

时间:2013-09-20 12:36:15

标签: javascript jquery datatables

我在使用jQuery + dataTables插件时偶然发现了一个奇怪的行为。

假设我有下表:

<table id="myTable">
    <thead>
        <th>col 0</th>
        <th>col 1</th>
    </thead>
    <tbody>
        <tr>
            <td><input type="checkbox" /></td>
            ...
        </tr>
        ...
    </tbody>
</table>

我在document.ready上调用$('#myTable').dataTable({...});,并希望在单击按钮时获取已检查输入的所有行(即使它们不在表的当前页面上)。

要获取所有行(包括未选中的行),我使用$('#myTable').dataTable().fnGetNodes()API-Link)返回一个包含所有这些tr节点的数组。之后我使用这个数组来构造一个jQuery对象:

var nodearray = $('#myTable').dataTable().fnGetNodes();
var trs = $(nodearray);

这是我不明白的部分。我尝试了两种方法来获取所有已检查的节点但结果却不同:

// returns all rows correctly (including invisible rows from other pages)
trs.find('td input:checked').closest('tr'); 

// return only rows from the current page
trs.has('td input:checked');

DataTables-plugin做什么来隐藏行,以便jQuery.has()找不到它们,为什么jQuery.find()仍然可以工作?

PS:我创建了simple fiddle here

1 个答案:

答案 0 :(得分:3)

如果我们检查DOM,我们可以看到只有当前页面元素是DOM的一部分,因此其他元素只是因为它们不在DOM中而只存在于内存中而被隐藏。

然而,对于这个异常问题,它似乎只发生在1.8.x之前的jQuery版本中,因此它可能是修复后的库中的一个错误。

显示has方法的

Here's a test case不适用于1.8.x以下版本的内存中元素:

console.log($('<div><span></span></div>').has('span').length); //0

修改: 这是一个错误,我找到了票证:http://bugs.jquery.com/ticket/11543