我决定构建自己的javascript自动完成搜索,因为我有一个数组中超过120,000个元素的列表,而且简单的jQuery UI自动完成和jQuery自动完成只是没有为我工作。
实际证明这很简单,到目前为止,有80,000个元素的列表非常快。无论如何,我迫切需要在我的自动完成中引入重音折叠,但我不知道我应该如何去做它以保持高效。这是我的JS:
var arr = ["Wayne Réviér", "Wayne Röllo", "Wayne Rolls", "Wayne Grety", "Wayne Rüm", "Wayne Erry"]; //Example list.
var searchBox = document.getElementById('searchBox');
jQuery('#searchBox').on('input propertychange paste', function() {
$('div').html("");
var listCounter = 0;
setTimeout(function(){
if(searchBox.value.length >= 3) { //restrict to 3+ characters.
for (var i = 0; i < arr.length; i++) { //loop through array
if( listCounter <= 4) { //only show top 5 results.
searchBoxLower = searchBox.value.toLowerCase(); //make comparing easier
arrLower = arr[i].toLowerCase();
if(arrLower.indexOf(searchBoxLower) > -1) {
listCounter++; //result found. +1 counter.
$('div').append(arr[i]+"<br>");
}
}
}
}
}, 5);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="searchBox"/>
<div>
</div>
&#13;
我怎样才能在其中引入重音折叠?此外,如果你发现任何可以提高效率的东西我都喜欢听。谢谢!
答案 0 :(得分:0)
我可能会在searchBoxLower上进行RegExp测试。我现在不在家测试代码,但我认为这篇文章可能会让你感兴趣。
http://alistapart.com/article/accent-folding-for-auto-complete
大多数情况下,当我需要自动完成搜索时,我正在使用Ajax和数据库,如果我这样说,我会用原始形式替换所有重音字符。防爆。所有的éèêàâôö等...与'e','a','o'。这使得搜索过程变得更加容易,但它会为您提供更多结果。
我希望这篇文章可以帮到你。