Jquery 如何为typeahead数据集中的每个datumtokenizer设置唯一的minLength
背景:Jquery 如何为typeahead数据集中的每个datumtokenizer设置唯一的minLength,jquery,typeahead.js,bloodhound,Jquery,Typeahead.js,Bloodhound,背景: var games = new Bloodhound({ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title', 'diff'), queryTokenizer: Bloodhound.tokenizers.whitespace, prefetch: 'https://api.myjson.com/bins/ss93y' ); $('.basic .typeahead').typeahead({ hin
var games = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title', 'diff'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: 'https://api.myjson.com/bins/ss93y'
);
$('.basic .typeahead').typeahead({
hint: false,
highlight: true,
minLength: 1,
limit: 5,
}, {
name: 'games',
display: 'title',
source: games,
templates: {
header: '<h3 class="games-header">Games</h3>'
}
});
我正在使用typeahead.js向用户提供搜索建议。我希望用户能够看到基于我的数据集的“标题”和“差异”的建议。我遇到的问题是,当title和diff字段重叠时,可能会导致一些混乱的结果
在这幅图中,您可以看到活动查询是“Ea”,并且字体显示了标题“Earthbound”和差异“Easy”的建议。我不喜欢这个结果,而是希望一个少于3个字符的查询只从“title”字段中提取
问题:
var games = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title', 'diff'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: 'https://api.myjson.com/bins/ss93y'
);
$('.basic .typeahead').typeahead({
hint: false,
highlight: true,
minLength: 1,
limit: 5,
}, {
name: 'games',
display: 'title',
source: games,
templates: {
header: '<h3 class="games-header">Games</h3>'
}
});
如何为数据集中的每个datumtokenizer设置唯一的minLength?因此,建议从标题中提取,从第一个字符开始,直到查询至少有3个字符,建议才从“diff”开始提取
代码:
var games = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('title', 'diff'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: 'https://api.myjson.com/bins/ss93y'
);
$('.basic .typeahead').typeahead({
hint: false,
highlight: true,
minLength: 1,
limit: 5,
}, {
name: 'games',
display: 'title',
source: games,
templates: {
header: '<h3 class="games-header">Games</h3>'
}
});
var games=新猎犬({
datumTokenizer:Bloodhound.tokenizers.obj.whitespace('title','diff'),
queryTokenizer:猎犬,标记,空白,
预取:'https://api.myjson.com/bins/ss93y'
);
$('.basic.typeahead')。typeahead({
提示:错,
推荐理由:没错,
最小长度:1,
限额:5,
}, {
名称:'游戏',
显示:“标题”,
资料来源:游戏,
模板:{
标题:“比赛”
}
});
JS小提琴:
考虑到您需要的定制级别,我建议您实现自己的数据获取和子字符串匹配器功能,而不是使用侦探犬。我的解决方案基于
fetch('https://api.myjson.com/bins/ss93y)。然后(结果=>{
返回result.json();
}).然后(游戏=>{
var substringMatcher=(查询,cb)=>{
var normalizedQuery=query.toLowerCase();
if(normalizedQuery.length<3){
/*如果查询长度小于3个字符,则仅对标题进行筛选*/
返回cb(games.filter(game=>game.title.toLowerCase().includes(normalizedQuery));
}否则{
/*如果查询至少3个字符,请根据标题或差异进行筛选*/
返回cb(games.filter(game=>game.title.toLowerCase().includes(normalizedQuery)| | game.diff.toLowerCase().includes(normalizedQuery));
}
}
$('.basic.typeahead')。typeahead({
提示:错,
推荐理由:没错,
最小长度:1,
限额:50,
}, {
名称:'游戏',
显示:“标题”,
来源:substringMatcher,
模板:{
标题:“比赛”
}
});
});