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 建议没有样式(没有边框、透明背景等)