0

ログイン時にユーザーデータを取得するサイトがあります。このデータは mysql によって文字列として保存され、この文字列を ajax で呼び出した後、js 関数 str.split() でデータを分割します。これは、チェックしたい btn のすべての ID を含む配列を返し、「.each」呼び出しを使用して、一致するすべての btn をチェックします。大きな問題は、このプロセスがローカル サーバーで約 10 秒かかることです。ユーザーデータを取得するためのより良い、より高速な方法はありますか? ps: ユーザー ログイン時に何百もの btn について話します。

コードは次のとおりです。

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])

最初にクラスを実行することで 4 ~ 5 秒ではなく、約 1 秒で 1000 個のアイテムをループしてクリックをトリガーすることができました。

<a>追加のオーバーヘッドを追加する siblings() の呼び出しを回避できるように、クリックしたい実際に ID を付けることができれば、それも役に立ちます。

于 2012-04-10T14:07:31.107 に答える
0

checked="true"サーバーを制御できる場合は、クリックイベントをトリガーする代わりに、php で条件付きで設定して、html 属性を使用する時間を大幅に節約できます。

Javascript に行き詰まっている場合: わかりませんがchecked、「クリック」イベントもトリガーしないため、クリックするよりもプロパティを設定する方が速い場合もあります。

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

私はそれをテストしていませんが、動作するはずです。

ただし、可能であれば、サーバーに設定することをお勧めします。

于 2012-04-10T14:15:36.697 に答える