【问题标题】:Passing static array to jquery-tokeninput将静态数组传递给 jquery-tokeninput
【发布时间】:2013-09-12 12:42:27
【问题描述】:

我将一个静态数组传递给 jquery 令牌输入,但搜索结果不完全匹配,因为没有服务器端查询..

对于数组 ['aa','bab','aab','abb'],如果我输入 ab,我会在 'abb' 和 'aab' 之前得到 'bab'。

谁能帮我解决这个问题..

提前谢谢你。

【问题讨论】:

    标签: jquery jquery-autocomplete jquery-tokeninput


    【解决方案1】:

    我不完全确定您希望如何对结果进行排名,起初我以为您希望以字符串开头的项目位于顶部,但后来我不明白 'aab' 应该如何排在 ' 之前bab' 用于搜索查询“ab”。

    无论如何,如果您想根据搜索查询对结果进行排序,我认为您有几个选择。

    我推荐的第一个方法是构建一个服务器端脚本来处理这个问题。将任何完全匹配项拉到您需要返回的 JSON 数组中的第一项是一件简单的事情。这是解决它的非hacky方式!

    第二个,如果您决定将其全部保留在客户端,则将在库中 populateDropdown 方法的开头重新排序结果数组(c. 843 行)

    最后,最优雅、最“正确”的方法是重新配置onResult 回调以将搜索查询作为参数,然后您可以使用回调方法对结果进行排序.

    希望这能给我们一些思考,祝你好运!

    【讨论】:

    • 是的,谢谢.. 但我的问题是在最初阶段,我将执行 ajax 调用以将所有自动完成数据提取到一个数组中,然后我将使用该数组进行搜索自动完成。这是我的问题开始,问题是我无法在客户端像 sql 查询那样排序。
    • 我不完全理解这个问题,但如果你的意思是我认为你的意思......当你将一个指向 php 页面的链接作为 TokenInput 的参数时,每次都会查询您在自动完成中搜索,而不仅仅是在开始时获取数组。如果您已经在使用 AJAX 调用从服务器获取您的数组,并且希望对您的结果进行排序,我不明白您为什么不直接将它们写在 php 脚本中?
    • 没有没有。可能我试图在页面加载本身时将整个数据库本地预取到一个 js 数组,然后使用该数组进行搜索自动完成令牌输入。就是这样..
    • 很高兴你把这一切都整理好了!
    【解决方案2】:

    我已经获取了两个搜索项,匹配项在每个单词的第一个字母上。限制为 15 个结果。这给了我完美的结果。

    //Do the search through local data
    var results = $.grep(array, function (row) {
      return row["id"].toLowerCase().indexOf(term.toLowerCase()) > -1;
    });
    var results1="";
    if(results.length<15){
       results1 = $.grep(array, function (row) {
       return row["value"].toLowerCase().indexOf(term.toLowerCase()) > -1;
    });
    }
    var diff = $(results1).not(results).get();
    results= $.merge( $.merge([],results), diff);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 2011-11-13
      • 1970-01-01
      相关资源
      最近更新 更多