481 Stimmen

JQuery .each() rückwärts

Ich verwende JQuery, um einige Elemente auf einer Seite auszuwählen und sie dann im DOM zu verschieben. Das Problem, das ich habe, ist, dass ich alle Elemente in der umgekehrten Reihenfolge auswählen muss, in der JQuery sie natürlich auswählen möchte. Zum Beispiel:

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

Ich möchte alle li-Elemente auswählen und den Befehl .each() auf sie anwenden, aber ich möchte mit Element 5 beginnen, dann mit Element 4 usw. Ist dies möglich?

9voto

yurakis Punkte 301

Wenn Sie die Methode nicht in jQuery.fn speichern möchten, können Sie

[].reverse.call($('li'));

5voto

finklez Punkte 59

Ich musste eine Umkehrung von $.each durchführen, also habe ich Vinays Idee verwendet:

//jQuery.each(collection, callback) =>
$.each($(collection).get().reverse(), callback func() {});

hat gut funktioniert, danke

4voto

David Andres Punkte 30563

Mit der jQuery-Funktion each können Sie nicht rückwärts iterieren, aber Sie können dennoch die jQuery-Syntax nutzen.

Versuchen Sie das Folgende:

//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
}

2voto

NRTRX Punkte 61

Ich fand Array.prototype.reverse erfolglos mit Objekten, so dass ich eine neue jQuery-Funktion als Alternative zu verwenden: jQuery.eachBack() . Es durchläuft wie das normale jQuery.each() würde, und speichert jeden Schlüssel in einem Array. Anschließend wird das Array umgekehrt und der Rückruf für das ursprüngliche Array/Objekt in der Reihenfolge der umgekehrten Schlüssel ausgeführt.

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);
}

-1voto

mattyfew Punkte 144

Sie können auch versuchen

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X