Bananas Development Blog: share your thoughts

Javascript div sortieren mit mootools

Ich habe schon mal hier über das sortieren von divs gesprochen. Damals war das noch mit script.aculo.us verwirklicht.

Nun verwende ich mittlerweile aber eher Mootools. Daher schreibe ich mal hier wie man das selbe mit mootools macht.


Als Erstes brauchen wir natürlich mootools:
- download mootools core
Dazu brauchen wir noch die plugins:
- mootools more builder (einfach Sortables markieren und es werden automatisch alle benötigten Dinge markiert)

Nun binden wir unsere mootools js scripte in die HTML( in den head Bereich ) Datei ein:
<script src="js/mootools.js" type="text/javascript" language="JavaScript"></script$gt;
<script src="/js/mootools-1.2-more.js" type="text/javascript" language="JavaScript"></script>


Nun brauchen wir noch die Liste bzw. Element die wir sortieren wollen.
<ul id="sortingDiv">
	<li name="el-1">Hallo</li>
	<li name="el-2">Hallo 1</li>
	<li name="el-3">Hallo 2</li>
	<li name="el-4">Hallo 3</li>
</ul>


Nun kommen wir zu dem Javascript Teil der die Element "sortierbar macht":
window.addEvent('domready', function(){
    var mySortables = new Sortables('#sortingDiv', {
	   constrain: true,
	   clone: true,
	   revert: true,
	   onComplete: function(){
	      storeOrder()
	   }
   });
}


Was passiert da nun genau ?
Wenn der Body nun fertig geladen ist holen wir uns das div/Element in dem unsere Liste enthalten ist. Danach werden alle li element nun bewegbar gemacht.
Die Erklärung der einzelnen Optionen findat man hier.

Nun will man ja auch diese Sortierung irgendwie abspeichern.
Dabei kommt das onComplete in Aktion. Damit legt man fest was am Ende der Sortierung gemacht werden soll. Dort ist eine function angegeben die ausgefürht werden soll.

fcuntion storeOrder {
var grpList = '';
var j=0;
// get the divs inside the sorting div
orderDivs = document.getElementById("sortingDiv").getElementsByTagName("li");
for (var i=0;i < orderDivs.length;i++) {
	var entryId = orderDivs[i].getAttribute('name');
	grpList += entryId + "=" + j + ";";
	j++;
}
// write those values into the hidden fields
document.getElementById('sortOrder').value = grpList;
}

Hier werden die Element nun nach der Reihenfolge im DOM ausgelesen und ein string ertellt.
Dieser string ist komma separiert und wird in ein hidden input field abgelegt.
Dieses feld kann man mit PHP aberbeiten und somit die Sortiertung abspeichern.
Natürlich kann man anstelle auch gleich ein XHTTP Request machen das die Sortierung im Hintergrund abspeichert. Ist aber geschmackssache.

Das war es auch schon. Im Grunde nicht wirklich kompliziert.

Sollten noch Fragen offen sein, bin ich gerne bereit diese zu beantworten.

banana
out.
  • hallo, ich wollte eine Liste mit JavaScript sortieren und bin genau so vorgegangen wie in Deinem schönen Tutorial. Leider bringt er mir immer folgenden Fehler Fehler: missing ( before formal parameters Quelldatei: http://localhost/pear_google/mytest.php Zeile: 8, Spalte: 36 Quelltext: window.addEvent('domready', function);{
    #1  Reply
  • Hallo Alex, danke für dein Kommentar und das verwenden meines Tuts ;-) Laut der Fehlermeldung die du geschrieben hast, hast du einen Syntax Fehler: Das mit dem addEvent sollte so aussehen. window.addEvent('domready', function(){ // hier kommt der code rein }

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Trackbacks / Pingbacks