我有一个下拉列表,其中包含大约 100,000 行组成一个列表。
<input id="search" type="text" />
<ul>
<li>item 1</li>
<li>item 2</li>
...
<li>item 100,000</li>
</ul>
我有一个用作搜索的文本框,因此当您键入它时,它会匹配列表中项目的输入,删除不匹配的内容。这是我编写的用于删除列表元素的类。
// requires jQuery
var Search = (function(){
var cls = function (name) {
var self = this;
self.elem = $('#' + name);
self.list = $('#' + name).next('ul').children();
self.elem.bind('keyup', function () { self.change(); });
};
cls.prototype = {
change: function () {
var self = this;
// gets the closest ul list
var typed = self.elem.val();
// only do something if there is something typed
if (typed !== '') {
// remove irrelevent items from the list
self.list.each(function () {
var item = $(this).html();
if (item.indexOf(typed) === -1) {
$(this).addClass('zero');
// tried using a class with visibility hidden
} else {
$(this).removeClass('zero');
}
});
} else {
// check what list items are 'hidden' and unhide them
self.list.each(function () {
if ($(this).hasClass('zero')) {
$(this).removeClass('zero');
}
});
}
}
};
return cls;
}());
我只是添加一个添加高度为 0 的类,并且没有边距、填充等,但我也尝试过使用可见性:隐藏。我也尝试过在 jQuery 中使用 detach 方法,但这在速度方面大致相同。
他们是否有任何 JavaScript 专家可以看到代码中的任何问题,或者提供一些优化技术?