jQuery在IE中非常慢

jQuery在IE中非常慢,jquery,internet-explorer,Jquery,Internet Explorer,我编写了一个代码来过滤元素列表 HTML: 法国加拿大阿根廷葡萄牙=0) { $(this.show(); } 其他的 { $(this.hide(); } } });//每个 }//结束 我用类“ms selective”中的大约500个元素测试了这段javascript代码。 在我的IE8中,此代码以10000ms的速度运行,而在FF中,此代码以1000ms的速度运行! 如何在IE中执行此任务 谢谢 循环,尤其是那些与DOM交互的循环,通常可能会在较旧的浏览器中导致性能下降。你可以通过确

我编写了一个代码来过滤元素列表

HTML:

  • 法国
  • 加拿大
  • 阿根廷葡萄牙
加拿大
Javascript:
函数过滤器可用()
{
var filterText=“ca”;//0)
{
$(this.hide();
}
其他的
{
if($(this).text().toUpperCase().indexOf(filterText)>=0)
{
$(this.show();
}
其他的
{
$(this.hide();
}
}
});//每个
}//结束
我用类“ms selective”中的大约500个
  • 元素测试了这段javascript代码。 在我的IE8中,此代码以10000ms的速度运行,而在FF中,此代码以1000ms的速度运行! 如何在IE中执行此任务


    谢谢

    循环,尤其是那些与DOM交互的循环,通常可能会在较旧的浏览器中导致性能下降。你可以通过确保你的选择器像不间断的时间旅行所建议的那样更加优化来帮助解决问题。不要反复重复
    $(this)
    ,而是将元素缓存在变量中:

    var $this = $(this);
    
    另外,与jQuery的
    $相反,通过使用常规的“for”循环,通常可以获得相当大的性能提升。each()
    方法:

    function filterAvailable () {
        var filterText = 'ca';
        var items = $('.ms-container .ms-selectable li');
        var $currentItem;
        var a_val;
        var a_txt;
    
        for (var i = 0, j = items.length; i < j; i++) {
            $currentItem = $(items[i]); // in place of $(this)
    
            // Contents of $.each() loop here
        }
    }
    
    函数过滤器可用(){
    var filterText='ca';
    var items=$('.ms container.ms可选li');
    var$currentItem;
    var a_val;
    var a_txt;
    对于(变量i=0,j=items.length;i
    在jsPerf上支持此功能的大量测试:

    记住任何DOM交互(包括查找)都是缓慢的,这一点很重要。当页面中有很多标记时,尤其如此。通过使用ID、缓存选择器、最小化DOM交互和使用常规for循环,可以加快速度。以下是尼古拉斯·扎卡斯的精彩综述:

    您真正需要构造多少次
    $(this)
    ?jQuery并不是使DOM遍历超快速的灵丹妙药;您的选择器一直从根目录进行搜索,这是不必要的慢。
    var $this = $(this);
    
    function filterAvailable () {
        var filterText = 'ca';
        var items = $('.ms-container .ms-selectable li');
        var $currentItem;
        var a_val;
        var a_txt;
    
        for (var i = 0, j = items.length; i < j; i++) {
            $currentItem = $(items[i]); // in place of $(this)
    
            // Contents of $.each() loop here
        }
    }