jquery .load()在多次加载后变慢

时间:2011-08-26 00:43:58

标签: jquery

我在jquery中写了这个相当简单的灯箱类型函数:

//LIGHTBOX FUNCTION
$(document).ready(function() {
    $('.litebox').click(function(event) {

        if ($('.lightbox_bg').length > 0) {

            $('.lightbox_content').empty();
            $('.lightbox_bg').empty();


            var link = $(this).attr('href');

            $('.lightbox_bg').fadeIn('slow');
            $('.lightbox_content').fadeIn('slow');

            $('.lightbox_content').load(link);
            event.preventDefault();

        } else {

            $("body").append("<div class='lightbox_bg'></div>");
            $("body").append("<div class='lightbox_content'></div>");

            var link = $(this).attr('href');

            $('.lightbox_bg').fadeIn('slow');
            $('.lightbox_content').fadeIn('slow');

            $('.lightbox_content').load(link);
            event.preventDefault();

        }

    });

    $("a#close-panel").click(function() {

        $('.lightbox_content').fadeOut(300).empty();
        $('.lightbox_bg').fadeOut(300).empty();

    });

});

我添加了.empty来尝试清空div的数据但是如果你在第4次之后打开一个链接它会慢下来,在第6或第7次之后它几乎会崩溃浏览器。 我对此很新。如何完全摆脱旧数据或div,以免它变慢。而且我不想刷新浏览器页面。如果我刷新它修复了问题,但必须有一个更优雅的解决方案。

任何帮助都将不胜感激。

谢谢你!

克雷格

编辑:

好的,所以我稍微简化了代码并添加了一些警报以查看发生了什么。这是新代码。

//Lightbox Function

$(document).ready(function(){

 $('.litebox_edit').click(function(event){

    var link = $(this).attr('href');

    if($('.lightbox_bg').length == 0){

        alert('No box'); 

        $("body").append("<div class='lightbox_bg'></div>");
        $("body").append("<div class='lightbox_content'></div>"); 

    }

        alert('box exists');

        $('div.lightbox_bg').fadeIn(300); 
        $('div.lightbox_content').fadeIn(300).load(link);


 event.preventDefault();

});



 $("a#close-panel").click(function(){ 

    $('div.lightbox_content').fadeOut(300);
    $('div.lightbox_bg').fadeOut(300);


}); 
});

所以会发生什么事情是你第一次点击一个链接它说警告“没有框”你单击确定然后它说警告“框存在”然后它显示灯箱。

然后关闭该框。现在,当您再次单击该链接时,它表示Box存在,然后单击确定,然后再显示“框存在”,然后显示该框。

然后第三次点击链接时,它会说“框存在”3或4次,并且每次关闭框并重新点击链接时它会不断增加。

将标签从.lightbox_bg更改为#lightbox_bg没有任何区别。

有什么想法吗?我必须以某种方式创建一个循环。但我不知道如何。

谢谢。

克雷格

2 个答案:

答案 0 :(得分:0)

通过你的代码看,我猜你的jQuery选择器会减慢你的速度。加载.load()次呼叫后,应删除所有旧内容并将其替换为新内容。所有jQuery选择器都基于类名进行全局查询 - 这通常很慢(即使选择器没有匹配很多元素)。尽可能尝试按ID引用元素(使用#语法),如果要选择多个元素,可以根据标记名称和类名进行选择,如下所示:

$("div.lightbox_bg");

看看是否有帮助。但是你描述的行为很奇怪,它不应该每次都减慢那个,因为你每次只增加一个div。无论如何让我知道你怎么走。

答案 1 :(得分:0)

FWIW,当返回的AJAX片段包含对已加载页面已引用的资源的脚本引用时,我遇到了类似的问题。一旦我确保我没有“重新引用”AJAX片段中的脚本,问题就消失了。