Twitter Typeahead.js 如何返回字符串中的所有匹配元素

Posted

技术标签:

【中文标题】Twitter Typeahead.js 如何返回字符串中的所有匹配元素【英文标题】:Twitter Typeahead.js how to return all matched elements within a string 【发布时间】: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,
);

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

【问题讨论】:

【参考方案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。(您要搜索的任何字段)

以上是关于Twitter Typeahead.js 如何返回字符串中的所有匹配元素的主要内容,如果未能解决你的问题,请参考以下文章

Twitter typeahead.js:可以使用 Angular JS 作为模板引擎吗?如果不是,我该如何替换 Hogan/Mustache js 的“”?

Twitter 的 typeahead.js 建议没有样式(没有边框、透明背景等)

Twitter typeahead .js 文件未更新

Twitter Typeahead.js - 选择时删除数据

如何在大型数据库中使用 typeahead.js

使用 Django 通过远程数据提高 Twitter 的 typeahead.js 性能