0

我有一个网站,在登录时获取用户数据。这个数据被mysql保存为一个字符串,在用ajax调用这个字符串后,我通过js函数拆分数据:str.split()。这将返回一个数组,其中包含我要检查的 btns 的所有 id,并通过“.each”调用检查所有匹配的 btns。最大的问题是这个过程在本地服务器上大约需要 10 秒。有没有更好更快的方法来获取用户数据?ps:我们在用户登录时谈论数百个btns。

这是代码:

function get_saved_list(){
    $.ajax({
        type: "post",
        url: "ajax/get_saved_list.php",
        success: function(data){
            list=data.split(";");
            for(j=0; j<list.length-1; j++){
                $(".content #"+list[j]).siblings('a').trigger('click');
            }
            setTimeout("$('#save').hide()", 1);
        }
    });     
}

一些 html 包含触发的“a”:

<ul class="content"><li>
<a class="third_cat_chb cat_chb_off"></a><span>page</span>
                                        <button id="page_<?php echo $row['page']."Z"; ?>chapter_<?php echo $row['s_id'];?>" style="width: 20px; margin-right: 5px;" class="page_chooser"></button></li></ul>

对不起格式不好:)

4

2 回答 2

2

不要在你的 ID 选择器前面加上一个类。这会禁止 jQuery 使用原生的 getElementById(),而是使用速度较慢的 getElementsByClassName()。

试试这个选择器:$("#"+list[j])

我能够循环浏览 1000 个项目并在大约 1 秒内触发一次点击,而不是先上一堂课需要 4-5 秒。

如果您可以在<a>要单击的实际对象上放置一个 ID,这也将有所帮助,这样您就可以避免调用 Siblings(),这会增加额外的开销。

于 2012-04-10T14:07:31.107 回答
0

如果您已经控制了服务器,则可以节省大量时间来使用checked="true"html 属性,在 php 中有条件地设置它而不是触发点击事件。

如果您坚持使用 Javascript:我不确定,但设置checked属性也可能比单击它更快,因为您不会同时触发“单击”事件。

$("#"+list[j]).siblings('a').attr('checked');

应该可以工作,虽然我没有测试过。

确实,如果可以的话,将其设置在服务器上是可行的方法。

于 2012-04-10T14:15:36.697 回答