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

标签 javascript jquery html dom

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

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

...

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

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

除了 .add() 之外,还有其他方法可以像我想要的那样构建 jQuery 对象吗?

我知道我可以为它们分配一些数据属性来指定顺序,并以此对我的结果集进行排序。然而,这将需要在我的应用程序中发生数十次,并且每次都必须分配订单数据值和排序将非常难看,并且实现起来会花费太长时间。

最佳答案

可以使用原生的Array.push:

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

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

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

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

关于javascript - 如何保留添加到 jQuery 匹配集中的项目的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281897/

相关文章:

javascript - 基于 Django 和 Ajax 的模型保存

html - 如何选择(和复制)显示 :table with Internet Explorer 8 or 9 中的文本

javascript - 设置 bcrypt 以与 Passport 和 async-await Node.js 库配合使用

javascript - AngularJS 中的嵌套 View 不起作用

javascript - 如何在 Framework7 中移动到另一个页面(导出变量)?

javascript - 单击按钮启用/禁用滚动

javascript - jquery项目如何做代码覆盖率测试

javascript - 为什么 SVG sprite XML 文件在服务器上显示为文本字符串,而不是在本地显示?

javascript - 无法从正文中删除填充 (ios) - Cordova

javascript - 将套接字客户端与 NestJs 微服务结合使用