【问题标题】:How does DataTables row-selector work?DataTables 行选择器如何工作?
【发布时间】:2014-09-11 19:42:08
【问题描述】:

我有一个包含许多行的数据表:

var table = $('#mytable').DataTable(...)

我正在尝试查找包含具有特定数据值的<a> 的行。

从文档中,我希望 table.rows('<magic row-selector>') 能够工作,对于 <magic row-selector> 的某些值。但即使是最简单的选择器似乎也不能像我期望的那样工作。

文档说,如果我将字符串传递给 rows(),它将被视为在 <tr> 元素上运行的 JQuery 选择器。

http://datatables.net/reference/type/row-selector

现在我确定这些行中的每一行都包含许多 's - 如果我检查 table.rows.nodes() 返回的元素的 outerHTML,我可以在调试器中看到它们。所以我希望这会返回所有行:

table.rows('a')

但它没有返回任何内容。

我不明白什么?

我应该使用什么选择器来查找所有包含<a> 的行以及数据属性的指定值?

根据回答编辑

davidkonrad 的回答提供了一些帮助——我需要传递一个 jQuery 选择器对象,而不是一个字符串。

不幸的是,我似乎需要在定义表之前构造 jQuery 选择器对象。我不确定我理解为什么,这似乎是一个不合理的限制,但是玩弄他的小提琴,我确实看到了 table.rows(selector) 返回的行在我初始化表之前或之后定义选择器之间的差异.

那么,就我而言,这使得这种方法无法使用,因为我要做的是删除在数据属性中设置了某些值的行。在我构建表格之前,我无法知道用户可能选择了哪些值。

【问题讨论】:

  • 你可以尝试使用jQuery对象datatables.net/reference/type/row-selector#jQuery吗?我的意思是像这样var aTags = $('#myTableRowsParent a') 然后使用table.rows( aTags ).data() ?在myTableRowsParent 下,我的意思是您要查找的所有a 标签的父级。

标签: javascript jquery jquery-ui jquery-datatables


【解决方案1】:

我也认为文档在这一点上有点神秘:)意思是

  1. “jQuery 选择器”是指“$(selector) 返回的 jQuery 对象”
  2. 只允许包含 <tr> 的 jQuery 对象
  3. 在分页表上,您必须在实例化数据表之前创建“jQuery 选择器”

因此,如果您想将 jQuery 对象传递给 dataTables API 实例,该实例包含所有行,其中任何 <td> 包含文本“test”

var selector = $('tr:contains("test")');
var table = $('#example').DataTable();
var rows = table.rows(selector).data();
//now you can iterate 
for (var i=0;i<rows.length;i++) {
    //each rows[i] is an array of the rows columns
    console.dir(rows[i]);
}  

如果您想将 jQuery 对象传递给 dataTables API 实例,该实例包含所有行,其中任何 &lt;td&gt; 包含包含特定文本的 &lt;a&gt;,例如“test”

var selector = $('tr a:contains("test")').parent().parent();
...
var rows = table.rows(selector).data();
...

示例中的上述选择器 -> http://jsfiddle.net/q2p2n23m/

【讨论】:

  • 文档非常清楚地指出它将字符串作为参数,它将被视为 jQuery 选择器。它没有说明将 jQuery 选择器对象作为参数。所以这并不是说这些文档是神秘的,它们完全是错误的。当然,如果有必要在创建表之前构造选择器对象,那么对于 rows() 获取一个字符串来创建 jQuery 选择器就太晚了。
  • 嘿@JeffDege - “文档非常清楚地指出它将字符串作为参数,它将被视为 jQuery 选择器” ..在哪里?这确实是一种直观的方式,这也许就是我们得到这种错误印象的原因。但是文本声明“可以将 jQuery 实例作为行选择器给出”。我也是,认为我们缺乏“纯粹的”.rows(&lt;selector&gt;) 机会!!
  • @JeffDege - "当然,如果有必要在创建表之前构造选择器对象,那么对于 rows() 获取一个字符串,它将从中创建一个 jQuery 选择器为时已晚。" - 只有在我们处理分页表时才需要这样做。原因是,dataTables 从 DOM 中“物理地”删除隐藏行,如果我们想将 作为一个整体来定位,那么 jQuery 选择器就没有用了。
  • “在哪里”? On datatables.net/reference/type/row-selector read the "When the selector is given as a string ...".我原以为它会像传递一个 jQuery 选择器一样工作,只是它会找到从 DOM 中删除的行。 (我们创建空表,并通过 AJAX 填充它们,所以无论如何使用 jQuery 选择器是行不通的。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2017-06-27
  • 1970-01-01
  • 2015-01-03
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多