我使用JQuery在页面上选择一些元素,然后在DOM中移动它们。我遇到的问题是,我需要以JQuery自然希望选择它们的相反顺序选择所有元素。例如:

<ul>
   <li>Item 1</li>
   <li>Item 2</li>
   <li>Item 3</li>
   <li>Item 4</li>
   <li>Item 5</li>
</ul>

我想选择所有的li项目,并使用.each()命令,但我想从项目5开始,然后是项目4等。这可能吗?


当前回答

$($("li").get().reverse()).each(function() { /* ... */ });

其他回答

你也可以试试

var arr = [].reverse.call($('li'))
arr.each(function(){ ... })

我认为你需要

.parentsUntill()

虽然不能使用jQuery的每个函数向后迭代,但仍然可以利用jQuery语法。

试试下面的方法:

//get an array of the matching DOM elements   
var liItems = $("ul#myUL li").get();

//iterate through this array in reverse order    
for(var i = liItems.length - 1; i >= 0; --i)
{
  //do Something
}

我以世界上最小的jquery插件的形式为您呈现有史以来最干净的方式:

jQuery.fn.reverse = [].reverse;

用法:

$('jquery-selectors-go-here').reverse().each(function () {
    //business as usual goes here
});

-所有功劳都归功于Michael Geary在他的帖子:http://www.mail-archive.com/discuss@jquery.com/msg04261.html

我发现Array.prototype.reverse对象不成功,所以我做了一个新的jQuery函数作为替代:jQuery. eachback()。它像普通的jQuery.each()一样遍历,并将每个键存储到一个数组中。然后反转该数组,并按照反转键的顺序对原始数组/对象执行回调。

jQuery.eachBack=function (obj, callback) {
    var revKeys=[]; $.each(obj,function(rind,rval){revKeys.push(rind);}); 
    revKeys.reverse();
    $.each(revKeys,function (kind,i){
        if(callback.call(obj[i], i, obj[i]) === false) {    return false;}
    });
    return obj;
}   
jQuery.fn.eachBack=function (callback,args) {
    return jQuery.eachBack(this, callback, args);
}