Daniel Thoma: selbstreferenzierung von js-objekten

Beitrag lesen

Hallo!

Es geht also darum Tabellen zu sortieren. Dabei soll die Kompfzeile nur erzeugt werden, wenn die Tabelle sortiert werden soll.
Ich würde das so lösen:

var tables = new Array();

//Ein Objekt für die sortierbaren Tabellen
function SortableTable(compare, head, table) {
  this.compare = compare; //Eine Funktion, die zwei Zeilen vergleicht und -1, 0, 1 für kleiner/gleich/größer zurück gibt.
  this.header = header; //Eine Funktion, die den Header ausgibt
  this.table = table //Die zu sortierende Tabelle
  this.sortTable = sortTable;
  this.table.insertChildNode(this.header(), 0);
  tables[id] = this;
}

function sortTable(spaltenNummer) {
  var elems = this.table.getElementsByTagName("tr");
  //Sortieren der Zeilen mit irgend einem Sortieralgorithmus unter verwendung von compare(elem1, elem2);
  for(var a = 0; a < elems.length; a++) {
    this.table.removeChildNode(elems[a]);
    this.table.appendChildNode(elems[a]);
  }
}

Header kann dann Eventhandler so nach folgendem Schema erzeugen:
var handler = "onclick='tables[" + this.id + "]'.sortTable(" + nr + ")";

Dann kann man mit onload="" eine Initialisierungsfunktion aufrufen, die nur noch folgendes tun muss:

new Table(myCompare, myHeader, document.getElementById("tableId"));

Die DOM-Methoden stimmen vermutlich nicht alle, aber darauf kommt es ja auch nicht so an ;-)

Grüße

Daniel