Spalte Datum in einer Tabelle sortieren
jule82
- javascript
Hi Leute,
ich hab da mal ein Problemchen :)
Und zwar hab ich eine Tabelle, dessen Spalten man wunderbar sortieren kann.
Nur sortiert er die Spalte Datum wie einen String. Also ohne die Syntax TT.MM.JJJJ zu berücksichtigen.
Jetzt wollte ich wissen, wo ich welche Funktion benutzen muss??
Wäre froh wenn mir jemand da weiter helfen könnte.
Danke im voraus :)
/******************************************************************************/
/**** Sortieren von Tabellen-Zellen ****************/
var sorted = "";
function sortTable(TableObj, ColNr, dec){
while(TableObj.tagName != "TBODY" && TableObj.tagName != "TABLE"){
TableObj = TableObj.parentNode;
}
// �berpr�fen ob schon Sortiert wurde.
if(sorted == ColNr + "" + dec + "" + (TableObj.innerText != undefined ? TableObj.innerText : TableObj.textContent)) {
return true;
}
if(document.getElementById("SortiertesTBODY")) {
TableObj.removeChild(document.getElementById("SortiertesTBODY"));
}
var TableArray = new Array();
var TRs = TableObj.getElementsByTagName("tr");
var TD;
// Den Sortierschl�ssel in ein Array schreiben
for (var i = 0; i < TRs.length; i++){
if(TRs[i].getElementsByTagName("td") && TRs[i].className != "TagNoSortAble"){
TD = TRs[i].getElementsByTagName("td")[ColNr-1];
var tmpString = TD.innerText != undefined ? TD.innerText.toLowerCase() : TD.textContent.toLowerCase();
if(tmpString.slice(0,1) == "�"){
tmpString = "a" + tmpString.slice(1);
} else if(tmpString.slice(0,1) == "�"){
tmpString = "u" + tmpString.slice(1);
} else if(tmpString.slice(0,1) == "�"){
tmpString = "o" + tmpString.slice(1);
}
TableArray[TableArray.length] = tmpString + "@@@" + i;
}
}
// Array Sortieren
TableArray.sort();
// Wenn gew�nscht, dann andersherum sortieren
if(!dec){
TableArray.reverse();
}
if(HTMLName == "I\_Glossar.htm") {
GlossarSorting(TableObj, TRs, TableArray);
doTabColored();
} else {
if(TableObj.tagName != "TBODY")
TableObj = TableObj.getElementsByTagName("tbody")[0];
// Hinzuf�gen der Sortierten Zeilen
for (i = 0; i < TableArray.length; i++){
var t = parseInt(TableArray[i].split("@@@")[1]);
var CloneNode = TRs[t].cloneNode(true);
TableObj.insertBefore(CloneNode, TRs[TRs.length-1].nextSibling);
}
// L�schen der Inhalte der Sortierten Zeilen
for (i = 0; i < TableArray.length; i++){
var t = parseInt(TableArray[i].split("@@@")[1]);
var tNode = document.createElement("tr");
tNode.className = "deleteNow";
TableObj.replaceChild(tNode, TRs[t]);
}
TRs = TableObj.getElementsByTagName("tr");
// L�schen der Zeilen
for (i = TRs.length - 1; i > 0; i--){
if(TRs[i].className == "deleteNow"){
TableObj.removeChild(TRs[i]);
}
}
var trueI = 2;
// Spalten wieder markieren.
for (var i=1; i < TRs.length ; i++){
if(TRs[i].style.display == "" || HTMLName != "Vorlagen.htm"){
if(trueI%2 == 1){
TRs[i].style.backgroundColor = "#E5EAF1";
trueI = 0;
} else {
TRs[i].style.background = "#FFFFFF";
trueI = 1;
}
}
}
}
sorted = ColNr + "" + dec + "" + (TableObj.innerText != undefined ? TableObj.innerText : TableObj.textContent) ;
}
hi,
Nur sortiert er die Spalte Datum wie einen String. Also ohne die Syntax TT.MM.JJJJ zu berücksichtigen.
Jetzt wollte ich wissen, wo ich welche Funktion benutzen muss??
Du brauchst einen Bezugstag, den Tag 0, z.b. auf den 1.1.1970 gelegt. Jedes Datum ist dann ein numerischer Wert bezogen auf Tag 0, nach dem Du numerisch sortieren kannst. Falls Du also das Datum in der Form TT.MM.JJJJ in der Tabelle hast, muss das die Sortierfunktion auf einen numerischen Tag umrechnen und im gewünschten Format wieder zurückgeben.
Hotte
Hi Hotte,
danke für die schnelle Antwort :)
wie hätte dass dann auszusehen. Ich bin eine absolute Javascript-Anfängerin :(
hi,
wie hätte dass dann auszusehen. Ich bin eine absolute Javascript-Anfängerin :(
In diesem Fall bin ich das auch, aber ich würde das so machen und ich denke, dass dazu genügend Informationen in SELFHTML zu finden sind.
Hotte
Hallo jule82,
Nur sortiert er die Spalte Datum wie einen String. Also ohne die Syntax TT.MM.JJJJ zu berücksichtigen.
in meinem Tabellensortierer zerlege ich das Datum (dd.mm.yyyy) in eine Zahl (yyyymmdd) und sortiere dann nach dieser.
Gruß, Jürgen
Hi,
Nur sortiert er die Spalte Datum wie einen String.
Natürlich - es *ist* ein String.
Also ohne die Syntax TT.MM.JJJJ zu berücksichtigen.
Es existiert keinerlei "Syntax".
MfG ChrisB