我打算构建一个自动完成搜索框,搜索 大约包含 12,000 多个数据的建议数据。jquery 从搜索框中获取值,搜索数据数组并将建议值存储在数组中,该数组将进一步用于填充建议。
<input type="text" id="Search_box" placeholder="Search Data">
$('#Search_box').on('input', function () {
suggester(document.getElementById("Search_box"));
});
以下函数从搜索框中获取输入值并搜索包含 12,000 多条记录的 search_array,并给出包含这些字符的数据列表作为建议。
function suggester(searchElement) {
var init;
searchElement.addEventListener("input", function(e) {
var x, y, i, val = this.value;
closeAllLists();
if (!val) { return false;}
init = -1;
var search_value = $('#Search_box').val();
suggest_data = [];
re = new RegExp("\\b\\w*" + search_value + "\\w*\\b", "ig");
for (i = 0; i < search_array.length; i++) {
if(search_array[i].match(re))
suggest_data = suggest_data.concat(search_array[i].match(re));
}
x = document.createElement("DIV");
x.setAttribute("id", this.id + "autocomplete-list");
x.setAttribute("class", "autocomplete-items");
x.setAttribute("onClick", "this.setSelectionRange(0, this.value.length)");
this.parentNode.appendChild(x);
for (i = 0; i < suggest_data.length; i++) {
y = document.createElement("DIV");
val = truncate(suggest_data[i],30);
reg = new RegExp(search_value, "ig");
n = val.search(reg);
res = suggest_data[i].substr(n,search_value.length);
val = val.replace(res, '<span class="text_highlighter">'+res+'</span>');
y.innerHTML = val;
y.innerHTML += "<input type='hidden' value='" + suggest_data[i] + "'>";
}
});
但是,当单击退格键时,这种方法会减慢速度。addEventListener 函数被触发多次,因此它在建议的函数内循环以给出结果。例如,如果输入 ASD 并且如果进一步键入退格键,则它在给出结果时开始减慢。应该怎么做才能加快搜索速度?
森栏
HUX布斯
随时随地看视频慕课网APP
相关分类