【问题标题】:DataTable Column Search with Numeric Values String使用数值字符串搜索 DataTable 列
【发布时间】:2020-06-10 19:24:42
【问题描述】:

我目前有一个 DataTable,它有一列包含一串数值,例如格式为“14,11,10”。它们最多只能是两位数,但值的数量可能会有所不同。它可以是单个值,例如“11”,也可以是字符串“16,14,10,21”中的多达四个值。

此外,我还有一个匹配处理程序和一个包含所有潜在数字值的 select2 框。用户可以选择匹配“任何”,如果数字字符串至少包含一个选定的数字,这将匹配每个结果。选择“匹配所有”将只搜索特定组合,无论数字的顺序如何。

<select class="form-control form-control-alternative" id="syngery_match" name="syngery_match">
    <option value="any">Match Any</option>
    <option value="all">Match All</option>
</select>

<select class="form-control form-control-alternative synergies-multi select2-hidden-accessible" name="synergies[]" multiple="" id="synergies" data-select2-id="synergies" tabindex="-1" aria-hidden="true">
    <option value="1">NP</option>
    <option value="2">BL</option>
    <option value="3">X</option>
    <option value="4">BM</option>
    <option value="5">TN</option>
    <option value="6">DK</option>
    <option value="7">AD</option>
    <option value="8">WK</option>
    <option value="9">WM</option>
    <option value="10">RS</option>
    <option value="11">M</option>
    <option value="12">1T</option>
    <option value="13">TK</option>
    <option value="14">WC</option>
    <option value="15">SP</option>
    <option value="16">FB</option>
    <option value="18">HH</option>
    <option value="19">DZ</option>
    <option value="20">CP</option>
    <option value="21">HT</option>
    <option value="22">CS</option>
</select>

任意匹配

除了一个位数的小问题之外,我还有这部分工作。

示例输入:[1,22,16]

if ($("#syngery_match").val() == "any")
{
    var any_string = $(this).val().toString();
    var select_snys = any_string.replace(',', '|');
    players_table.columns("#synergies_column").search(select_snys, true, false).draw();
}

由于 1 包含在数字字符串中,因此它返回包含诸如 11、12、13....19、21 等值的行。我将如何更改我的代码,以便返回的行必须包含字符串中的确切数字,而不仅仅是数字的一部分?

匹配所有

这部分也部分工作。这里唯一的问题是输入的数字字符串只返回具有确切顺序的数字的行。

目标行:[13,15,6]

示例输入:[6,13,15] 示例输入 2:[15,13,​​6]

两个示例输入没有返回任何结果,因为与表格中的列相比,输入的数字是乱序的。

else if ($("#syngery_match").val() == "all")
{
    var any_string = $(this).val().toString();
    players_table.column("#synergies_column").search(any_string, true, false).draw();
}

希望我能够足够清楚地解释我的情况。任何帮助将不胜感激!

【问题讨论】:

  • 在有点类似的情况下,我在表格中添加了一个隐藏列,其中的数据采用更适合过滤器的格式。在您的情况下,这可能是对数字进行排序,并使用某种分隔符 - 例如#6#13#15#。之后,剩下的就变成了 JavaScript 练习:根据用户的选择重新排列搜索数据以匹配此格式(匹配隐藏列中的完整字符串,或匹配子字符串,根据需要)。

标签: datatables


【解决方案1】:

您可以使用正则表达式进行精确搜索,以确保您的搜索结果以该值开头并且是一个完整的值

players_table.column("#synergies_column").search(`^${select_snys}$`, true, false).draw();

至于您的第二个问题,也许您可​​以将搜索查询和每列值拆分为数组,对它们进行排序,然后进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 2014-08-30
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2021-03-02
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多