DataTables行选择器如何工作?

时间:2014-09-11 19:42:08

标签: javascript jquery jquery-ui jquery-datatables

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

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

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

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

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

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

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

table.rows('a')

但它没有返回。

我不理解什么?

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

编辑以回答

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

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

在我的情况下,这使得这种方法无法使用,因为我尝试做的是删除在数据属性中设置了某些值的行。在构造表之前,我无法知道用户可能选择了哪些值。

1 个答案:

答案 0 :(得分:2)

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

  1. 通过&#34; jQuery选择器&#34;意味着&#34; $(选择器)&#34;
  2. 返回的jQuery对象
  3. 只允许包含<tr>的jQuery对象
  4. 在分页表上,您必须创建&#34; jQuery选择器&#34; 之前实例化dataTable
  5. 因此,如果您想将jQuery对象传递给dataTables API实例,该实例包含所有<td>包含文本&#34; test&#34;

    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实例,该实例包含所有<td>包含<a>包含特定文本的行,例如&#34; test&#34;

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

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