我有一个网站可以获取有关登录的用户数据。 这个数据由mysql保存为字符串,在用ajax调用此字符串后,我用js函数分割数据:str.split()。 这将返回一个数组,其中包含我要检查的btns的所有id,并且通过“.each”调用我检查所有匹配的btns。 最大的问题是这个过程在本地服务器上大约需要10秒钟。 获取用户数据有更好更快的方法吗? p.s:我们谈论用户登录时的数百个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>
sory表示格式不好:)
答案 0 :(得分:2)
不要在ID选择器前加上类。这禁止jQuery使用本机getElementById(),而是使用较慢的getElementsByClassName()。
请尝试使用此选择器:$("#"+list[j])
我能够循环播放1000个项目并在大约1秒钟内触发点击,而不是通过先完成一个课程来触发4-5秒。
如果你可以在想要点击的实际<a>
上放置一个ID,这样你就可以避免调用兄弟姐妹(),这会增加额外的开销。
答案 1 :(得分:0)
如果您可以控制服务器,那么可以节省大量时间来使用checked="true"
html属性,在php中有条件地设置它而不是触发点击事件。
如果您坚持使用Javascript:我不确定,但设置checked
属性可能比单击它更快,因为您不会触发“点击”事件
$("#"+list[j]).siblings('a').attr('checked');
应该可行,但我还没有测试过。
但是,如果可以的话,在服务器上设置它是可行的方法。