0


0

jQueryで選択した要素に対して特定の順序でアクションを実行する方法は?

このようなHTMLテーブルがあります。

 X

X

X

X

X

X

X

X

X

X

X

X

ここで、 `latest`クラスのすべてのオブジェクトに対してjQueryアクション(ajax呼び出し)を実行します。これは簡単です:

$('.latest').each(do_call());

しかし、ajaxアクションには時間がかかるため、要素を重要度順に並べています。 そして、 order1`を持つオブジェクトに対して do_call() を実行し、次に order2`要素などに対して実行したいと思います。

アクションが適切な順序で実行されるようにjQueryオブジェクトをソートするにはどうすればよいですか?

4 Answer


1


これはおそらくより効率的かもしれませんが、あなたが探していることをするはずです:

var latestItems = $('.latest');
var order = 1;
for(var i = -1, len = latestItems.length; ++i < len ) {
    var item = $('.latest .order' + order);
    doCall.call(item);
    order++;
}


1


最初に、配列内のすべての `.latest`要素とその順序クラスを取得します。

var order = [];

$('.latest').each(function() {
    // Get the order - all elements have class 'latest orderX':
    // remove the 'latest', get the classname, and add the latest back.
    order.push($(this).removeClass('latest').attr('class'));
    $(this).addClass('latest');
});

次に、配列をソートしてループし、対応する要素を取得します。

order.sort();

for(var i in order) {
    var obj = $('.latest.'+order[i]);
    do_call(obj);
}

このメソッドは、 `.latest`要素が順番にインデックス付けされていなくても機能します。例えば。 「order2」または「order3」が存在しない「order1」の後に「order4」を持つことができ、それでも動作します。


1


要素ごとに個別のajax呼び出しを実行するのではなく、1回の「大きな」ajax呼び出しですべてを実行してみませんか? データをサーバー側で分離し、単一の応答でクライアントの要素を更新するような方法でデータを統合する方法を見つけてください。


0


AJAX QUEUE pluginが便利だと思います。 マニュアルから:

_ Ajax Queueは、Ajaxの競合状態の管理に役立つプラグインです。 複数のAjaxリクエストが連続して迅速に行われると、結果が順不同で返される可能性があります。 これは、アプリケーションで奇妙な動作を引き起こす可能性があります。 Ajax Queueは、これらのリクエストを管理する方法を提供するプラグイン(実際には2つのプラグイン)です。 _