Kann ich $ .wrap () um eine Sammlung von Elementen in einem Array herum erstellen?

8

Nehmen wir an, ich habe eine Sammlung von "Items" wie folgt:

%Vor%

Ich möchte die Elemente durchschleifen und ein umschließendes div um ein beliebiges mit der Gruppe gruppieren, um etwas Ähnliches zu erzeugen (gruppierte Elemente sind immer direkt nebeneinander):

%Vor%

Dies ist das Skript, das ich habe:

%Vor%

Was passiert, ist, dass das Wrapping-Div um jedes Element getrennt im Array gewickelt wird (was sinnvoll ist), aber ich brauche es, um alle Elemente zusammen zu wickeln. Kann ich das irgendwie machen? Hier ist ein jsFiddle .

Bearbeiten: Es gibt eine komplexere Variation dieses Problems, die möglich ist, dies wäre eine Situation, in der es mehrere 'Gruppen' dieser Gruppen gibt, von denen jede in ihrer eigenen 'Gruppe' div eingeschlossen ist. Ausgangszustand:

%Vor%

Gewünschter Status:

%Vor%

Tut mir leid, dass ich das vorher nicht erwähnt habe. Danke!

    
igneosaur 28.06.2012, 10:14
quelle

3 Antworten

7

Probieren Sie stattdessen wrapAll aus:

%Vor%

DEMO: Ссылка

Um die einzelnen Gruppen von .group -Elementen zu umhüllen, können Sie Folgendes verwenden:

%Vor%

DEMO: Ссылка

Der obige Code wurde mit Hilfe von @ Jons Antwort zusammengestellt.

    
VisioN 28.06.2012, 10:16
quelle
5

Sie können eine Kombination aus .filter und .map verwenden, um das gewünschte Ergebnis zu erzielen:

%Vor%

In Aktion sehen .

Beispiel für JS-Ablage , um die aktuellen JSFiddle-Probleme zu umgehen.

Begründung

Die Methode .wrap bettet jedes Element in das aktuelle jQuery-Objekt im Markup von ein deine Entscheidung. Wenn Sie mehrere Elemente in demselben Wrapper einschließen möchten, müssen Sie diese N-Elemente mit einem jQuery-Objekt abgleichen und dann ein anderes jQuery-Objekt erstellen, das das one -Element enthält: das erste jQuery-Objekt. Es ist dieses letztere Objekt, das Sie an .wrap weitergeben sollten.

Also müssen wir hier ein jQuery-Objekt für jede Gruppe erstellen und dann all diese in ein anderes "master" jQuery-Objekt einfügen. Beginnen Sie mit der Auswahl aller .group -Elemente, denen nicht selbst ein .group Geschwister vorausgeht:

%Vor%

Erstellen Sie aus jedem dieser Elemente ein jQuery-Objekt, das das Element und alle folgenden Geschwister mit .group :

enthält %Vor%

Die resultierenden jQuery-Objekte werden automatisch innerhalb des "Master" -Objekts platziert, da sie die Stelle der leeren Elemente einnehmen, die wir mit .filter innerhalb des jQuery-Objekts ausgewählt haben, das wir mit $(".item.group") erstellt haben. Ein letzter Aufruf von .wrap ... schließt alles ab. :)

    
Jon 28.06.2012 10:24
quelle
3

Verwenden Sie wrapAll anstelle von wrap.

%Vor%

Die Dokumentation von wrapAll finden Sie unter - Ссылка

Weitere verfügbare Umbruchmethoden finden Sie unter - Ссылка

BEARBEITEN:

Für den komplexen Fall, dass es mehr als eine Gruppe geben kann, können wir es mit wrapAll mit einem $ .each wie folgt erreichen -

%Vor%     
Abhijit 28.06.2012 10:22
quelle

Tags und Links