检索数据表中的指定行

Retrieving specified rows in Datatables

本文关键字:数据表 检索      更新时间:2023-09-26

问题

有没有办法以编程方式仅检索与某些特定条件匹配的行 - 例如具有特定索引的行?

API有一个方法 - rows() ,可以通过提供selector-modifier参数来稍微操纵结果。但是,使用它,我最多可以使用当前的表搜索,而不是自定义的。

问题所在

为了更好地理解,我将提供有关我想要实现的目标的更多详细信息。

我正在使用选择扩展。我想使用外部触发器一次选择一些行。现在我这样做:

myTable.rows().every(function () {
    // ...
    // Check if the row should be selected and if so:
    this.select();
    // ...
});

但是,这会导致在表上触发与所选行数相同的select事件数。我有一个绑定到此事件的处理程序,它根据所选行执行对外部 API 的请求。由于我无法辨别哪个select是最后一个,因此由于事件数量众多,我的处理程序最终不必要地向外部 API 发送垃圾邮件。

解决 方案

  1. 仅检索匹配的行并对其使用rows().select()

我认为这将是最好的解决方案,因为select事件只会触发一次。但是,我不知道该怎么做 - 因此这个问题。

  1. 在选择过程完成之前,阻止处理程序调用外部 API。

我想出了两个黑客解决方案,我将作为最后的手段:

  • 根本不使用 avent 处理程序,只需在 rows().every() 循环后调用 API - 我仍然必须使用处理程序来处理手动行选择,但这可能会。

  • 遍历行两次 - 第一次检查哪一行是最后要选择的行,然后禁用处理程序,执行实际选择行的第二个循环,并在选择最后一行之前启用处理程序

我希望整个问题不会太混乱。需要明确的是 - 我想找到答案的是顶部的斜体问题。

选择器修饰符仅适用于选择所有行的情况。它不是为了通过选择器限制行。为此,您将使用行选择器,它更加灵活:

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

该页面上有几个示例,因此我不会在此处介绍这些选项。

正如您所建议的那样,如果您使用此选择器,然后在返回的行集上调用 .select(),则回调将只触发一次。