如何保留添加到jQuery匹配集的项目的顺序?

时间:2012-11-08 03:21:02

标签: javascript jquery html dom

我正在尝试按特定顺序向jQuery对象添加元素。但是,结果集的排序与DOM树相同。例如:

<div>one</div>
<span>two</span>
<p>three</p>

...

var $result = $("span").add("p").add("div");

我想要一个结果集,其中$ result [0]是span,$ result [1]是p,依此类推。但是,它们的排序与DOM中的顺序相同。

除了.add()之外,还有另一种方法来构建一个像我想要的jQuery对象吗?

我知道我可以为它们分配一些数据属性来指定顺序,并按此排序我的结果集。但是,这需要在我的应用程序中发生几十次并且必须分配订单数据值并且每次排序都会非常难看,并且实施起来需要很长时间。

3 个答案:

答案 0 :(得分:7)

您可以使用原生Array.push

$.fn.push = function(selector) {
    Array.prototype.push.apply(this, $.makeArray($(selector)));
    return this;
};

var $result = $("span").push("p").push("div");

DEMO:http://jsfiddle.net/ZUAcy/

您可能认为jQuery在add()的引擎盖下执行此操作但它实际上从函数返回pushStack以优化它的选择器:http://james.padolsey.com/jquery/#v=1.7.2&fn=jQuery.fn.add

答案 1 :(得分:0)

这样可行:

?CurrentDb.QueryDefs("TestQuery").Fields("SumOfSomething").Properties!Format

来自docs on .add()

  

要创建一个包含定义良好的顺序的元素的jQuery对象,并且没有排序开销,请使用var $result = $([ $('span')[0], $('p')[0], $('div')[0] ]); 签名。

答案 2 :(得分:0)

由以下代码产生的无序数组:

var $result = $("span").add("p").add("div");

应使用以下几行代码转换为有序数组:

var result=$("span").get().concat($("p").get(),$("div").get());
var $result=$(result);