2013-11-28 64 views
0

我m的小项目,包含网站列表(最大添加12000名称), 我要求用户选择他们的兴趣,因为我创建了一段代码在JS小提琴:fiddle包含大量数据的过滤html表格(超过12K行)

$(document).ready(function() { 
    $("#title").keyup(function() { 
     if ($(this).val() != "") { 
      $("#doc_list_content tbody>tr").hide(); 
      $("#doc_list_content td:contains-ci('" + $(this).val() + "')").parent("tr").show(); 
     } else { 
      $("#doc_list_content tbody>tr").show(); 
     } 
    }); 
}); 
$.extend($.expr[":"], { 
    "contains-ci": function (elem, i, match, array) { 
     return (elem.textContent || elem.innerText || $(elem).text() || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0; 
    } 
}); 

代码工作正常,数据量小,但是当到了12000行这导致浏览器无响应的错误。

我试过搜索并用我的代码玩了很多。我想用JS或PHP(它littlebit知识)

我的问题是相同类型的功能(对爵士小提琴):

1>是否使用这种类型的排序是可行的? 2>任何js/jquery解决方案? 3>我知道一点点的PHP作为服务器端脚本,它可以帮助解决问题。

谢谢。

+0

搜索数据数组,而不是DOM。桌子来自12K行吗? – charlietfl

+0

数据在mysql表中,加载时页面加载 – Ravi

回答

1

1不要使用jQuery的...这很慢。使用纯javascript

2创建包含该表的阵列


var tbl=[ 
[a1,b1,c1,d1], 
[a2,b2,c2,d2], 
] 

3使用while--循环,因为它是最快

var l=tbl.length 
while(l--){ 
} 

4使用非常小的速记或按位检查,因为他们更快。

var l=tbl.length 
while(l--){ 
!tbl[l][0]||(SOMETOGGLEFUNCTION(l))//l is the index of the real table 
} 

这是我知道检查快速12k记录的唯一方法。

+0

有效..谢谢。 – Ravi

1

如果是我,我基本上会使用某种'分页'来限制用户对数据的视图'数据较小的块,但可能仍然允许某种'搜索'功能,搜索/过滤通过所有的数据(不只是可见的块) - 通过一个数组我猜。

在过去的项目中,我发现对于速度/性能,最好在用户第一次向下滚动到当前数据块的“底部”时逐渐向DOM添加对象,然后添加新的大块,并删除前面的块......根据他们在书中的位置,而不是将书的所有单个页面放在他们面前的方式 - 用户如何转动书的页面 - 可能不是最好的比喻,但希望你按照我的想法。祝你好运。