Dschingis Khan
Ensign
- Registriert
- Juni 2007
- Beiträge
- 156
Guten Nachmittag,
Ich nutze in einer HTML-Tabelle ein Javascript, welches mir durch einen Klick auf den Tabellenkopf einer Spalte die Spalte alphabetisch sortiert (die Reihen werden dabei natürlich beibehalten). Habe ich mir mal ergoogelt und funktioniert soweit auch gut. Eine Sache stört mich aber noch und ich hoffe, ihr könnt mir da weiterhelfen (kenn mich null mit JS aus....):
Ein Klick auf Spalte 1 und sie wird von A-Z sortiert, ein weiterer Klick und sie wird von Z-A sortiert, noch ein Klick und sie ist wieder von A-Z sortiert. Lasse ich nun nach einer anderen Spalte sortieren und möchte dann wieder Spalte 1 sortieren lassen, hat sich das Script gemerkt, dass die letzte Sortierung der Spalte 1 von A-Z war und sortiert nun von Z-A. Ich möchte aber, dass es sich sowass nicht merkt, sprich sobald ich nach einer anderen Spalte sortieren lasse als die jetzt aktive, soll er von A-Z sortieren, ganz gleich wie die letzte Sortierung dieser anderen Spalte ausgesehen hat.
Ich hoffe, ich habe mich verständlich ausgedrückt und es kann mir jemand helfen. Hier das Script:
Mit freundlichen Grüßen, Dschingis Khan
Ich nutze in einer HTML-Tabelle ein Javascript, welches mir durch einen Klick auf den Tabellenkopf einer Spalte die Spalte alphabetisch sortiert (die Reihen werden dabei natürlich beibehalten). Habe ich mir mal ergoogelt und funktioniert soweit auch gut. Eine Sache stört mich aber noch und ich hoffe, ihr könnt mir da weiterhelfen (kenn mich null mit JS aus....):
Ein Klick auf Spalte 1 und sie wird von A-Z sortiert, ein weiterer Klick und sie wird von Z-A sortiert, noch ein Klick und sie ist wieder von A-Z sortiert. Lasse ich nun nach einer anderen Spalte sortieren und möchte dann wieder Spalte 1 sortieren lassen, hat sich das Script gemerkt, dass die letzte Sortierung der Spalte 1 von A-Z war und sortiert nun von Z-A. Ich möchte aber, dass es sich sowass nicht merkt, sprich sobald ich nach einer anderen Spalte sortieren lasse als die jetzt aktive, soll er von A-Z sortieren, ganz gleich wie die letzte Sortierung dieser anderen Spalte ausgesehen hat.
Ich hoffe, ich habe mich verständlich ausgedrückt und es kann mir jemand helfen. Hier das Script:
Code:
function SortableTable (tableEl) {
this.tbody = tableEl.getElementsByTagName('tbody');
this.thead = tableEl.getElementsByTagName('thead');
this.tfoot = tableEl.getElementsByTagName('tfoot');
this.getInnerText = function (el) {
if (typeof(el.textContent) != 'undefined') return el.textContent;
if (typeof(el.innerText) != 'undefined') return el.innerText;
if (typeof(el.innerHTML) == 'string') return el.innerHTML.replace(/<[^<>]+>/g,'');
}
this.getParent = function (el, pTagName) {
if (el == null) return null;
else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
return el;
else
return this.getParent(el.parentNode, pTagName);
}
this.sort = function (cell) {
var column = cell.cellIndex;
var itm = this.getInnerText(this.tbody[0].rows[1].cells[column]);
var sortfn = this.sortCaseInsensitive;
if (itm.match(/\d\d[-]+\d\d[-]+\d\d\d\d/)) sortfn = this.sortDate; // date format mm-dd-yyyy
if (itm.replace(/^\s+|\s+$/g,"").match(/^[\d\.]+$/)) sortfn = this.sortNumeric;
this.sortColumnIndex = column;
var newRows = new Array();
for (j = 0; j < this.tbody[0].rows.length; j++) {
newRows[j] = this.tbody[0].rows[j];
}
newRows.sort(sortfn);
if (cell.getAttribute("sortdir") == 'down') {
newRows.reverse();
cell.setAttribute('sortdir','up');
} else {
cell.setAttribute('sortdir','down');
}
for (i=0;i<newRows.length;i++) {
this.tbody[0].appendChild(newRows[i]);
}
}
this.sortCaseInsensitive = function(a,b) {
aa = thisObject.getInnerText(a.cells[thisObject.sortColumnIndex]).toLowerCase();
bb = thisObject.getInnerText(b.cells[thisObject.sortColumnIndex]).toLowerCase();
if (aa==bb) return 0;
if (aa<bb) return -1;
return 1;
}
this.sortDate = function(a,b) {
aa = thisObject.getInnerText(a.cells[thisObject.sortColumnIndex]);
bb = thisObject.getInnerText(b.cells[thisObject.sortColumnIndex]);
date1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
date2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
if (date1==date2) return 0;
if (date1<date2) return -1;
return 1;
}
this.sortNumeric = function(a,b) {
aa = parseFloat(thisObject.getInnerText(a.cells[thisObject.sortColumnIndex]));
if (isNaN(aa)) aa = 0;
bb = parseFloat(thisObject.getInnerText(b.cells[thisObject.sortColumnIndex]));
if (isNaN(bb)) bb = 0;
return aa-bb;
}
// define variables
var thisObject = this;
var sortSection = this.thead;
// constructor actions
if (!(this.tbody && this.tbody[0].rows && this.tbody[0].rows.length > 0)) return;
if (sortSection && sortSection[0].rows && sortSection[0].rows.length > 0) {
var sortRow = sortSection[0].rows[0];
} else {
return;
}
for (var i=0; i<sortRow.cells.length; i++) {
sortRow.cells[i].sTable = this;
sortRow.cells[i].onclick = function () {
this.sTable.sort(this);
return false;
}
}
}
Mit freundlichen Grüßen, Dschingis Khan