Javascript 需要帮助加速IE的标记云过滤器吗
关于如何在IE中加快过滤速度的想法(过滤过程在Firefox中表现不错,但在IE中几乎无法使用)。基本上,它是一个带有过滤文本框的标记云,用于过滤云Javascript 需要帮助加速IE的标记云过滤器吗,javascript,jquery,Javascript,Jquery,关于如何在IE中加快过滤速度的想法(过滤过程在Firefox中表现不错,但在IE中几乎无法使用)。基本上,它是一个带有过滤文本框的标记云,用于过滤云 <html> <head> <script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script type="text/javascript"> $(document).ready(function
<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#tagFilter').keyup(function(e) {
if (e.keyCode==8)
{
$('#cloudDiv > span').show();
}
$('#cloudDiv > span').not('span:contains(' + $(this).val() + ')').hide();
});
});
</script>
</head>
<body>
<input type="text" id="tagFilter" />
<div id="cloudDiv" style="height: 200px; width: 400px; overflow: auto;">
<script type="text/javascript">
for (i=0;i<=1300;i++)
{
document.write('<span><a href="#">Test ' + i + '</a> </span>');
}
</script>
</div>
</body>
</html>
$(文档).ready(函数(){
$('#tagFilter').keyup(函数(e){
如果(e.keyCode==8)
{
$('#cloudDiv>span').show();
}
$('#cloudDiv>span').not('span:contains('+$(this.val()+')).hide();
});
});
对于(i=0;i而不是做1300个文档),尝试创建一个级联的字符串并进行1次写入。这可能有助于如果是文档。减慢IE. 的写入以及所说的,考虑使用<代码> jQuery的AppEnter()/Cux>方法(或至少非jQuery等效)。< P>因为标签应该是唯一的。(将标记“awesome”放在云中两次是没有意义的),根据标记字符串的清理版本为每个跨度指定一个“id”值(用下划线等替换空格)。这会使事情变得更快,因为过滤器只需按“id”值进行过滤
事实上,您甚至不需要过滤器:只需隐藏云中的所有
元素,然后显示由当前字段值形成的带有“id”值的元素。如果没有,则没有,但如果有,则速度非常快。
- 避开子选择器,它很慢
- 基于包含的文本进行选择可能更慢。要么使用类名存储标记信息,要么在javascript中构建某种数据结构(看看jQuery data()函数)
- 无需显示然后重新隐藏几乎所有跨距。使用:可见选择器
- 在进行更改后,分离()cloudDiv和append()可能会有所帮助
<> LI>你可以考虑在KEYUP上设置一个定时器,而不是立即显示/隐藏东西。这样你就可以等待用户完成打字了。
很抱歉在OP中没有这样说(虽然刚刚更新了它),但我对过滤过程性能更感兴趣。但这仍然很有用。谢谢。$(“#cloudDiv>span:not(:contains(+$(this).val()+)”);选择器会不会然后更改?@rod uhh…选择器?哦,你是说在过滤器中?是的,肯定-你可能只选择“span”,然后。而不是(“#”+makeTagId($(this.val()))
或其他任何东西。就像Tgr写的那样,不要为“>”这件事操心。有办法继续使用“contains”吗当用户键入关键字时,这是否违背了按id搜索的目的?这有什么意义?如果你有“id”值,你就有了唯一的标识符,这比要求浏览器挖掘节点的DOM内容要好得多。