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

Dan*_*nny 8 html javascript jquery dom

我试图以特定的顺序向jQuery对象添加元素.但是,结果集的排序与DOM树相同.例如:

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

...

var $result = $("span").add("p").add("div");
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dav*_*ing 8

你可以使用原生Array.push:

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

var $result = $("span").push("p").push("div");
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/ZUAcy/

你可能会认为jQuery是这样做的,add()但它实际上从函数返回一个pushStack来优化它的选择器:http://james.padolsey.com/jquery/#v=1.7.2&fn=jQuery.fn.add