2012-04-09 42 views
0

我有一個網站可以獲取登錄用戶數據。 這個數據是由mysql作爲字符串保存的,在用ajax調用這個字符串之後,我用js函數分割數據:str.split( )。 這將返回一個數組,其中包含我希望檢查的btns的所有id,並使用「.each」調用檢查所有匹配的btns。 最大的問題是這個過程在本地服務器上需要大約10秒。 有更好更快的方式來獲取用戶數據嗎? p.s:我們討論用戶登錄時的數百個btns。manage javascript data

這裏是代碼:

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

_用戶登錄_上有數百個btns ...你認真嗎? – jrummell 2012-04-09 19:10:45

+0

你是否使用相同的ID多個按鈕?在哪裏花10秒?它在ajax上等着嗎?或檢查按鈕?你可以請包括一個樣本的HTML? – Patricia 2012-04-09 19:10:55

+0

有多少時間是ajax下載,其中有多少是通過ID循環的? – Jordan 2012-04-09 19:10:58

回答

2

不要在類中添加ID選擇器的前綴。這將禁止jQuery使用本機getElementById(),而是使用getElementsByClassName(),該速度較慢。

試試這個選擇來代替:$("#"+list[j])

我能夠遍歷1000個項目,並通過第一做一個類約1秒觸發一次點擊,而不是4-5秒。

如果您可以在您想要點擊的實際<a>上放置一個ID,這樣可以避免調用siblings(),這會增加額外的開銷。

0

如果你已經控制了服務器,它將節省大量的時間來使用HTML屬性checked="true",在php中有條件地設置它,而不是觸發點擊事件。

如果您遇到Javascript:我不確定,但設置checked屬性的速度可能比點擊它快,因爲您不會觸發「點擊」事件。

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

應該工作,雖然我還沒有測試過。

真的,如果可以的話,把它設置在服務器上是一條可行的路。

+0

這是一個鏈接。爲什麼會有一個檢查屬性? – Jordan 2012-04-10 20:44:42

+0

哇,在問題中讀了20次這個詞後,我完全誤讀了代碼,我以爲他試圖檢查一些複選框。因爲爲什麼有人會以編程方式點擊數百個鏈接?我可能會刪除這個答案。 – quodlibetor 2012-04-10 20:48:25

+0

我點擊了數百個BT,因爲每次點擊都會更改頁面上的大量數據。 必須點擊每個btn,並且每個檢查的btn都會影響其他btns,因此,這些點擊是有原因的! – Tarek 2012-04-10 21:26:15

相關問題