繁体   English   中英

如何限制类别的jQuery自动完成结果?

[英]How do I limit results of jQuery autocomplete with categories?

我想像文档中那样对 jQuery自动完成结果进行分类,但是我也想限制每个类别中结果的数量。 我知道如何使用if语句slice来限制结果的数量,但是我无法弄清楚如何将它们与类别功能结合使用。

说我的数据看起来像这样:

var data = [
  { label: "Location #1", category: "city" },
  { label: "Location #2", category: "city" },
  { label: "Location #3", category: "city" },
        // ...more locations \\
  { label: "Location #25", category: "city" },
  { label: "Person #1", category: "people" },
  { label: "Person #2", category: "people" },
  { label: "Person #3", category: "people" },
        // ...more people  \\
  { label: "Person #25", category: "people" }
];

如果使用以上方法之一将结果数限制为5,则会影响结果总数 ,因此,如果用户开始在搜索字段中输入“ o”,他们将看到:

城市: 位置#1,位置#2,位置#3,位置#4,位置#5

但是,我想显示的是5个地点 5个人的限制:

城市: 位置#1 ...位置#5

...其次是:

人物 第1个人...第5个人

我的实际数据来自CartoDB中一个更复杂的SQL查询,但是这里有一个简单的JSFiddle就足够了: http : //jsfiddle.net/vqwBP/577/

Javascript Array.Filter方法可以完成您需要的操作。 谓词函数fn必须跟踪每个类别的计数器,因此将其包装在维护此状态信息的闭包内。 必须扩展counter对象以准确反映所有可能的类别(区分大小写)。

var predicate = function () {
    var counter = { city: 0, people: 0, elves: 0 };
    var fn = function(item) {
        counter[item.category] += 1;
        return (counter[item.category] <= 5);
    }
    return fn;
}();

response(results.filter(predicate));

http://jsfiddle.net/Cfp2N/3/上尝试一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM