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

Twitter Typeahead Bloodhound: Get current search string inside sorter option

我正在尝试根据搜索字符串在数据字段中的位置对建议进行排序。如果有人键入 '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;
    }

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

谢谢,

伯恩德

P.S。对不起我的英语

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

var currentTypeAheadField = null;

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

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

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

没有找到更好的解决方案,但它有效。