需要帮助加快IE的标签云过滤器

时间:2010-05-05 23:43:03

标签: 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(){


        $('#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>&nbsp;</span>');
}
</script>
</div>

</body>
</html>

感谢, rodchar

4 个答案:

答案 0 :(得分:2)

而不是做1300 document.writes,尝试创建一个连接字符串并做1写。如果它是正在减慢IE的document.writes,这可能会有所帮助。

答案 1 :(得分:1)

derek所说的内容外,请考虑使用jQuery's append()方法(或至少使用非jQuery方法)。

答案 2 :(得分:1)

由于标签应该是唯一的(云中的标签“真棒”两次没有意义),根据标签字符串的清理版本给每个跨度一个“id”值(替换带下划线的空间等)。这应该会使事情变得更快很多,因为过滤器可以通过“id”值。

实际上,您甚至不需要过滤器:只需隐藏所有云中的<span>元素,然后显示具有“id”值的元素。当前字段值。如果没有一个,那么就没有一个,但如果有,那就会非常快。

答案 3 :(得分:1)

  • 避开子选择器,它很慢。
  • 根据包含的文本进行选择可能更慢。使用类名来存储标记信息或在javascript中构建某种数据结构(看一下jQuery data()函数)。
  • 无需显示,然后重新隐藏几乎所有跨度。使用:visible selector。
  • 在您进行更改后,可能有助于分离()#cloudDiv并将其追加()。
  • 你可能会考虑在keyup上设置一个计时器,而不是立即显示/隐藏东西。这样你可以等待用户完成输入。