3

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

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

选择器返回一个像这样的对象:

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

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

如何反转该顺序,以便each循环从selfdom 树开始并向上而不是向下工作?

4

5 回答 5

4

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

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

http://jsfiddle.net/6VVAD/

编辑:该.each()函数不会以这种方式工作,因为我们不能将它与@scoota269 提到的非 jQuery 对象链接起来

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

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

jQuery.each( reversed_elements, function(i, elem) {
     console.log(elem , i)
});
​
于 2013-01-03T11:26:03.770 回答
1

您可以使用reverse数组方法。

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

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

于 2013-01-03T11:18:23.063 回答
1

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

jQuery.fn.reverse = [].reverse

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

于 2014-01-14T22:18:08.253 回答
0

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

于 2013-01-03T11:18:53.750 回答
0

我想.reverse()对于大型节点集来说可能非常昂贵,所以我建议使用

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

于 2015-05-21T15:02:28.583 回答