Jeder Weg, um shuffle-Inhalte in mehreren div-Elementen
Ich bin relativ neu in Javascript und wollte Fragen ob es einen schnellen Weg, um den shuffle-Inhalte in mehreren <div>
- tags. Zum Beispiel
<div id='d1'>
<span>alpha</span>
<img src='alpha.jpg'>
</div>
<div id='d2'>
<span>beta</span>
<img src='beta.jpg'>
</div>
<div id='d3'>
<span>gamma</span>
<img src='gamma.jpg'>
</div>
<button onclick='shuffle_content();'>Shuffle</button>
Nach einem Klick auf den button möchte ich den Inhalt in d1, d2, d3 zu tauschen (zum Beispiel, vielleicht d3 würde der erste sein, dann d1, dann d2).
Einen schnellen Weg, um Dinge bewegen zu kopieren, das erste div-element (d1), dann legen Sie es am Ende (nach d3), und löschen Sie dann den ursprünglichen d1. Aber das hat auch nicht wirklich zufällige Dinge. Es macht einfach Dinge, die gehen in den Zyklus (das wäre ok).
Irgendwelche Vorschläge würden geschätzt. Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
sind Sie ok mit der Verwendung einer javascript-Bibliothek wie jQuery? hier ist eine schnelle jQuery Beispiel zu erreichen, was Sie wollen. die einzige änderung zu HTML ist die Zugabe von einem container-element vorgeschlagen:
und javascript:
Einer letzten Frage wurde gerade geschlossen als Duplikat von diesem, aber ich glaube, ich habe eine bessere Antwort als jeder hier. Diese Methode ist sehr direkt. Es gibt keine mucking mit dem kopieren von HTML, so dass änderungen an der DOM -, Stil -, event-Handler, etc.
Shuffle alle Kinder von einigen Eltern-element, wählen Sie eine zufällige Kind und hängen Sie es zurück zu den Eltern ein zu einer Zeit, bis alle Kinder wurden neu angefügt.
Verwendung von jQuery:
Demo: http://jsfiddle.net/C6LPY/2
Ohne jQuery es ist ähnlich und genauso einfach:
Demo: http://jsfiddle.net/C6LPY/5/
Edit: Hier ist eine Aufschlüsselung des Codes:
[0]
bekommt Sie das erste element in diesem array.while
loop... wir-Schleife, bis das Array leer ist und alle Elemente wurden neu eingefügt.while
Schleife. Ich hoffe, das hilft zu klären es für Sie..splice()
entfernt das Element aus dem array. Da in jeder iteration derwhile
Schleife entfernen wir genau ein Element aus dem array, die Schleife wird beendet, sobald wir Sie bearbeitet haben, ist jedes element.divs
ist ein Array, dessen Elemente Referenz dom-Knoten. Wir erstellt das array durch kopieren der Elemente aus dem parent-elementchildren
Sammlung. Entfernen Sie ein element aus dem array nicht ändern, der DOM. Ie aufrufendivs.splice(n, 1)
entfernt ein element aus dem Array, aber das element existiert noch in die Seite, als ein Kind vonparent
.Können Sie greifen die Inhalte der einzelnen div -
Bestimmen dann eine neue Bestellung für Sie nach dem Zufallsprinzip .. und setzen Sie dann die einzelnen Inhalte in das neue Ziel
sagen zum Beispiel, die Zufälligkeit gab:
dann einfach nur:
Ausbau der nette Antwort durch @gilly3, mit jQuery kann man eigentlich vermeiden, anfügen zufällig ausgewählten Elemente
divs
in einer Schleife, die durch zufälligSortieren
ingdiv
statt undappend
ing Sie alle auf einmal:Demo: http://jsfiddle.net/ey70Lxhk/
Beachten Sie jedoch, dass diese Technik nicht präzise in Bezug auf Zufälligkeit, und setzt auf
sort
die nicht Linear mit der Anzahl der Elemente.Ich würde mit server-side-code, dies zu erreichen. Ich weiß, das ist nicht wirklich eine Antwort auf deine Frage, aber es ist eine alternative Implementierung.
Beste Grüße,
Frank
Ich würde wrap die divs in ein äußeres div, dann übergeben Sie dessen id auf shuffle_content().
Dort konnten Sie erstellen ein neues div, Klonen der wrapper-div-Knoten in einer zufälligen Reihenfolge zu füllen, dann ersetzen der wrapper-div mit den neuen div.
Für Ihre HTML, die kurze Antwort auf Ihre Frage ist:
Dorthin schrieb ich Folgendes, was ich denke funktioniert besser:
Ich versuchte, mich zu packen nach unten, die Letzte while-Anweisung:
aber das ist ziemlich schwer zu Lesen und fehleranfällig.
Geht mit jQuery oder Prototype könnten Sie Folgen der gleichen grundlegenden Struktur und das Ergebnis bekommen, das Sie suchen.
Ich persönlich denke, es sieht sogar noch besser, wenn Sie hinzufügen, 2 weitere divs zu den
cards
stack, erweitern Sie diedivCardsArray
legen Sie die folgenden style-block, und fügen Sie diesen code direkt nach derdivCardsArray
definition.Ich würde dir empfehlen, mischen Sie die Inhalte, nicht die eigentlichen Divs selbst. Sie können dies erreichen, indem Sie die Inhalte in separaten html-Seiten - keine header-Informationen oder Körper, nur der Inhalt.
Dann eine Funktion die beim laden der Seite zufällig weisen die div bekommt, was Inhalt und verwenden Sie dieses zum ändern des DIV-Inhalts: