代码之家  ›  专栏  ›  技术社区  ›  Ron Harlev

使用jquery切换一大组页面项的速度很慢

  •  1
  • Ron Harlev  · 技术社区  · 15 年前

    我有一个很大的页面元素集(大约100个),我想用jquery切换(显示/隐藏)。 我只是用 $(".toggleElementClass").toggle(); 这看起来是一个微不足道的解决方案。

    问题是这需要几秒钟,即使是在最新的Chrome浏览器上。有没有更快、更有效的方法来达到同样的效果?

    3 回复  |  直到 15 年前
        1
  •  6
  •   bobince    15 年前

    您可以通过利用样式表将所有显示更改键从单个属性更改(通常是祖先元素的类名)中去掉,从而减少浏览器必须完成的工作量。这意味着你可以使它们同时改变,而不是一个接一个地改变,减少回流次数,提高速度。例如:

    <style type="text/css">
        #mything p.toggled { display: none; }
        #mything.toggled p { display: none; }
        #mything.toggled p.toggled { display: block; }
    </style>
    
    <div id="mything">
        <p> foo </p>
        <p> bar </p>
        <p> bof </p>
        <p> zot </p>
    </div>
    
    <button id="toggle-all">all</button>
    
    <script type="text/javascript">
        $('#mything>p').click(function() {
            $(this).toggleClass('toggled');
        });
        $('#toggle-all').click(function() {
            $('#mything').toggleClass('toggled');
        });
    </script>
    
        2
  •  2
  •   Teja Kantamneni    15 年前

    很难用提供的信息正确回答这个问题。但是在这些场景中,有一个很大帮助的改进是尝试缩小dom搜索上下文,而不是使用 $(".toggleElementClass").toggle(); 最好使用 $("#myelements > .toggleElementClass").toggle(); 将缩小jquery查找要切换元素的范围。

        3
  •  0
  •   Ron Harlev    15 年前

    刚升级到jquery 1.4.2 这使得所有问题都无关紧要。即使是在“慢”IE7或IE8上。 只是 这么多 更快。难以置信。