我想用输入框过滤表格。它可以工作,但它在我的目标平台--Iphone,Htc Touch HD(800行需要大约4秒来过滤)的智能手机上很慢。
如果你能加快速度,请告诉我。
function time(){
var now = new Date();
var time = now.getTime();
return time
}
function filter (phrase, _id){
var starttime = time();
var words = phrase.value.toLowerCase().split(" ");
var table = document.getElementById(_id);
var ele = null;
var rows = new Array();
for (var r=0 ; r < table.rows.length; r++){
ele = table.rows[r].innerHTML.replace(/<[^>]+>/g,"");
var displayStyle = 'none';
for (var i=0 ; i < words.length; i++) {
if (ele.toLowerCase().indexOf(words[i])!=-1){
displayStyle = '';
}else {
displayStyle = 'none';
break;
}
}
rows[r] = displayStyle;
}
alert((time() - starttime)/1000 +" Sec");
for(var k=0; k < rows.length; k++){
table.rows[k].style.display = rows[k];
}
}
答案 0 :(得分:2)
在给定平台的情况下,性能有点合理,但这里有一些想法:
1。)在迭代过程中不要计算数组的长度(参见https://developer.mozilla.org/en/A_re-introduction_to_JavaScript#Arrays)
2。)在开始时对搜索字符串执行一次toLowerCase(),而不是在每行检查时执行
3。)最大的麻烦可能你使用innerHTML和replace(),但它将取决于浏览器实现,看看你是否可以用更有效的获取方法替换它您需要比较的单元格中的文本。
答案 1 :(得分:0)
使用Firebug profiler为您的JavaScript配置文件。然后你可以看到哪些操作花费的时间最长。衡量就是知道。