jQuery parents()选择器的更改/反向顺序

时间:2013-01-03 11:14:50

标签: jquery

我在jQuery中为每个循环使用以下选择器:

$("#myid").parents().andSelf().each(function({})

选择器返回如下对象:

object[html, body, div#global_container, div#content, div#myarea, span.myclass, div#myid]

这意味着each循环将从最远的父项开始,然后最终以self结束

如何撤销该订单,以便each循环以self开头并沿着dom树向上而不是向下?

5 个答案:

答案 0 :(得分:4)

为了使reverse()工作,您需要将jQuery对象更改为array

var elements = $("#myid").parents().andSelf();
elements.toArray().reverse().each(function() {} );

http://jsfiddle.net/6VVAD/

编辑:.each()函数不会以这种方式工作,因为我们无法将其链接到非jQuery对象,因为@ scoota269提到了

我通过将集合传递给每个函数来修复它,如下所示:

var elements = $("#myid").parents().andSelf();
var reversed_elements = elements.toArray().reverse();

jQuery.each( reversed_elements, function(i, elem) {
     console.log(elem , i)
});
​

答案 1 :(得分:1)

您可以使用reverse数组方法。

Array.reverse($("#myid").parents().andSelf());

请注意,reverse功能并非在所有浏览器上都可用。但您可以使用es5-shim.js来解决此问题。

答案 2 :(得分:1)

向jQuery添加反向函数的好方法:

jQuery.fn.reverse = [].reverse

Array.reverse几乎适用于所有浏览器:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

答案 3 :(得分:0)

$($("#myid").parents().andSelf().toArray().reverse()).each(function({})

答案 4 :(得分:0)

对于大型节点集,我猜.reverse()可能相当昂贵,所以我建议使用

$.merge($el, $el.parents()).each(function(){ ... })