【问题标题】:Twitter Typeahead.js how to return all matched elements within a stringTwitter Typeahead.js 如何返回字符串中的所有匹配元素
【发布时间】:2014-03-30 09:01:06
【问题描述】:

默认情况下,twitter typeahead.js 只返回匹配字符串开头的元素,例如:

来源:['type','typeahead','ahead']

查询:'类型'

返回:'type' 和 'typeahead'

--

查询:'提前'

返回:'领先'

我希望它返回 'ahead' 和 'typeahead'

我的代码:

var clients = new Bloodhound({
    datumTokenizer: function(d) { return Bloodhound.tokenizers.whitespace(d.value); },
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    limit: 10,
    prefetch: {
        url: '/clients.json',
        filter: function(list) {
            return $.map(list, function(value) { return { name: value }; });
        }
    }
});

clients.initialize();

$('.client').typeahead(null, {
    displayKey: 'value',
    source: clients.ttAdapter(),
    minLength: 1,
});

已经有一个问题,但我不明白答案。

【问题讨论】:

    标签: javascript twitter typeahead.js typeahead


    【解决方案1】:

    我找到了一个解决方案...问题是我太习惯于 bootstrap2 typeahead 以至于我不理解 datumTokenizer 的东西。如果其他人觉得难以理解,我会在下面稍微描述一下:

    queryTokenizer:您要查询的单词数组,如果您查询 'test abcd',它会将字符串转换为 ['test','abcd'] 并查找与这两个单词匹配的内容。

    datumTokenizer : 将与 queryTokenizer 匹配的单词数组。 JSON 中的每个项目都有一组要匹配的单词。

    所以如果你有来源:

    ['好测试','坏测试']

    并查询“est”。您需要让 datumTokenizer 返回一个包含 'est' 的数组,例如:

    ['good','test','ood','od','test', 'est', 'st'] 第一项

    ['bad','ad','test', 'est', 'st'] 用于第二项

    下面是我写的代码,我不知道它是否最适合它,但我认为它无论如何都会有所帮助:

    new Bloodhound({
        datumTokenizer: function(d) {
            var test = Bloodhound.tokenizers.whitespace(d.value);
                $.each(test,function(k,v){
                    i = 0;
                    while( (i+1) < v.length ){
                        test.push(v.substr(i,v.length));
                        i++;
                    }
                })
                return test;
            },
        queryTokenizer: Bloodhound.tokenizers.whitespace, 
        limit: 10,
        prefetch: {
            url: '/lista.json',
            ttl: 10000
        }
    });
    

    【讨论】:

    • 考虑 var i = 0;对于严格模式。否则肯定 +1。
    • 为我工作!谢谢!
    • 这正是我想要做的。
    • 我们如何在同一个dataNumTokenizer中搜索多个列
    • 无需与代码打架即可工作,只需将 d.value 更改为 d。(您要搜索的任何字段)
    猜你喜欢
    • 2016-06-21
    • 2016-03-11
    • 2020-03-28
    • 2020-08-22
    • 2017-10-11
    • 1970-01-01
    • 2014-08-21
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多