【发布时间】:2012-11-28 19:55:51
【问题描述】:
我正在使用滑动菜单(选择/对象 html 之一),它是通过使用 jsp 页面从数据库中获取数据动态生成的。
我还有一个输入文本字段,我可以在其中从滑动菜单中搜索内容。我想写一个包含在我的菜单中的词的词根,我的菜单必须“调整大小”以显示我写过的所有带有词根的项目,并且只显示那些。
我不能使用服务器端操作(比如通过 post 发送数据)但我需要解决这个客户端(因为我需要立即得到这个结果)。
我实际上已经使用 javascript 解决了这个问题,但是这个解决方案存在一些性能问题,因为我必须使用 IE 8。
是否有使用 JQuery 或 Ajax 的类似解决方案?
这是与我的代码类似的内容:
HTML:
<select multiple id="testSelect">
<option>test</option>
<option>temp</option>
<option>cast</option>
<option>dest</option>
<option>inst</option>
</select>
<input type="text" value="" onkeyup="searhSelect(this)" />
searhSelect 函数将在每次按键时调用(当用户实际释放键时)并过滤#testSelect 对象。
JS:
var optionsList;
function searhSelect(el) {
var select = document.getElementById('testSelect');
if(!optionsList) {
optionsList = select.cloneNode(true); //copy select to a variable for future use
}
select.innerHTML = "";//remove all options.
for(var i =0; i < optionsList.options.length; i++) {
var opt = optionsList.options[i];
if(opt.innerHTML.indexOf(el.value) != -1) {
select.appendChild(opt.cloneNode(true));
}
}
}
【问题讨论】:
-
你有多少个元素?在那个 searchSelect 中使用了克隆的 DOM 元素。可能将项目存储在常规 JS 数组中会有所帮助。
-
我猜超过 10k 个元素。当我开始打字时,大约需要 20 秒才能结束任务。如何将我的元素存储到常规 JS 数组中?不幸的是,我在 JS 上并不是那么“聪明”...
-
嗯... 10k 个元素?那是很多。不要认为即使是 JS 数组实际上也会有所帮助... AJAX 可能会有所帮助,但是一旦您尝试显示大量项目 - 无论如何它都会很慢(因为 dom 更新缓慢)。
-
是的,这就是问题所在。这些性能仅在旧版本的 IE 中,在 Chrome 上确实更快。顺便感谢您的提示!
标签: jquery html ajax innerhtml slidedown