Twitter Typeahead Bloodhound:在分类器选项中获取当前搜索字符串

Posted

技术标签:

【中文标题】Twitter Typeahead Bloodhound:在分类器选项中获取当前搜索字符串【英文标题】:Twitter Typeahead Bloodhound: Get current search string inside sorter option 【发布时间】:2020-06-03 14:50:56 【问题描述】:

我正在尝试根据数据字段中搜索字符串的位置对建议进行排序。如果有人输入 'ar',建议 A:'how are you' 应该排在 B:'come as you are' 之前,因为搜索字符串匹配 A 中的第二个单词和 B 中的第四个单词。这已经很有效了好吧。

要获取搜索字符串,我使用$('.searchfield').val()。问题是,我在页面中有多个搜索字段,所以我必须知道当前使用的是哪个搜索字段。

这是我在 Bloodhound 声明中的代码:

sorter: function(a, b) 
        var input_string = $('.searchfield').val(); // <-- Here is my problem
        input_string = input_string.split(/[ \-]+/);
        input_string = input_string[0].toLowerCase();
        var aArray = a.name.toLowerCase().split(/[ \-]+/);
        var bArray = b.name.toLowerCase().split(/[ \-]+/);
        var apos = 0, bpos = 0;
        for (var i = 0; i < aArray.length; i++) 
            if (aArray[i].indexOf(input_string) !== -1) 
                apos = i;
                break;
            
        
        for (i = 0; i < bArray.length; i++) 
            if (bArray[i].indexOf(input_string) !== -1) 
                bpos = i;
                break;
            
        
        if (apos < bpos) 
            return -1;
         else if (apos > bpos) 
            return 1;
         else return 0;
    

有人知道如何获取当前使用的输入字段的搜索字符串吗?

谢谢,

伯纳德

附:对不起我的英语

【问题讨论】:

【参考方案1】:

好的,我定义了一个全局变量,当输入字段获得焦点时,我将元素保存到变量中。

var currentTypeAheadField = null;

jsTypeahead.on('focus', function() 
    currentTypeAheadField = $(this);
)

所以在我的 Bloodhound 声明中,我可以访问该值:

sorter: function(a, b) 
    var input_string = currentTypeAheadField.val();
    ...

没有找到更好的解决方案,但是可以。

【讨论】:

以上是关于Twitter Typeahead Bloodhound:在分类器选项中获取当前搜索字符串的主要内容,如果未能解决你的问题,请参考以下文章

Twitter typeahead .js 文件未更新

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

即使查询返回结果,Twitter-typeahead 也不显示任何结果

html Twitter Bootstrap Typeahead自动完成示例

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

twitter typeahead ajax结果未全部显示