代码之家  ›  专栏  ›  技术社区  ›  kender

如何按一定顺序对jquery所选元素运行操作?

  •  0
  • kender  · 技术社区  · 15 年前

    我有一个这样的HTML表:

    <table>
     <tr><td>X</td><td>X</td><td class='latest order1'>X</td><td class='latest order4'>X</td></tr>
     <tr><td>X</td><td>X</td><td class='latest order3'>X</td><td class='latest order2'>X</td></tr>
     <tr><td>X</td><td>X</td><td class='latest order6'>X</td><td class='latest order5'>X</td></tr>
    </table>
    

    现在,我要对以下所有对象运行jquery操作(ajax调用) latest 类,这很简单:

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

    但是,由于Ajax操作需要一些时间,所以我根据元素的重要性对它们进行了排序。我想运行 do_call() 对象用 order1 然后 order2 元素等等。

    如何对jquery对象进行排序,以使操作按正确的顺序运行?

    4 回复  |  直到 15 年前
        1
  •  1
  •   Tatu Ulmanen    15 年前

    首先,获取所有 .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);
    }
    

    即使您的 最新的 元素没有按顺序索引;例如 order4 之后 order1 没有 order2 order3 现在仍然有效。

        2
  •  1
  •   Jared xxtesaxx    15 年前

    这可能更有效,但它应该满足您的需求:

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

    为什么不在一个“大”的Ajax调用中全部执行,而不是为每个元素运行单独的Ajax调用?找出一种方法来整合您的数据,使其在服务器端分离,并且A有一个单独的响应来更新客户机上的元素。

        4
  •  0
  •   Ivan Nevostruev    15 年前

    我想你能找到 AJAX QUEUE plugin 有用的从手册中:

    Ajax队列是一个有助于管理Ajax竞争条件的插件。当快速连续地发出多个Ajax请求时,结果可能会无序返回。这可能会导致应用程序中出现奇怪的行为。Ajax队列是一个插件(实际上是2个插件),它提供了一种管理这些请求的方法。