我在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树向上而不是向下?
答案 0 :(得分:4)
为了使reverse()
工作,您需要将jQuery对象更改为array
:
var elements = $("#myid").parents().andSelf();
elements.toArray().reverse().each(function() {} );
编辑:.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(){ ... })