我在使用 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>
我调用$('#myTable').dataTable({...});
document.ready 并希望在单击按钮时获取所有已检查输入的行(即使它们不在表格的当前页面上)。
为了获取所有行(包括未选中的),我使用$('#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:我在这里创建了一个简单的小提琴