Tabelle sortiert falsch
GW78
- javascript
Hallo!
Ich versuche gerade, für ein Spiel eine Tabelle zu erstellen.
Es geht um diese Seite:
http://www.east-park.de/contest/contest_komplett.html
Die Tabelle lässt sich einfach nicht richtig sortieren. Plötzlich werden Einträge doppelt erzeugt oder die Punkte werden nicht richtig sortiert. Woran liegt das?
Der komplette Quellcode ist sichtbar (Quellcode anzeigen), hier die Script-Teile:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
#Kopfbereich { position:absolute; top:20px; left:30px; }
#Tabelle { position:absolute; top:100px; left:30px; }
body { background-color:#FFFFFF; }
h1,h2,h3,p,ul,ol,li,td,th { font-family:Arial,sans-serif; color:black; }
h1 { font-size:24px; margin-top:4px; margin-bottom:4px; margin-left:6px; }
p,ul,ol,li,td,th { font-size:13px; color:#000000; }
th,td { padding:1px; }
</style>
<script type="text/javascript">
<!--
var Tabellendaten = new Array(
"Lady GaGa","Just Dance","1","Nordkurvensteher","1","171",
"The Killers","Human","1","Marfinha","2","153",
[...]
"The Who","My Wife","2","schalkefann","86","3",
"Broilers","Meine Sache","2","Pershing","87","0"
);
var sortierte_Tabellendaten = new Array(Tabellendaten.length);
var Spaltenueberschriften = new Array(
"Interpret",
"Titel",
"Contest",
"User",
"Platzierung",
"Punkte"
);
var Spalten = Spaltenueberschriften.length;
var Zeilen = Tabellendaten.length / Spalten;
var Spaltenueberschriftformatierungen = new Array(
"width=\"220\" valign=\"top\" style=\"text-align:center; border:solid 1px #DBDBDB\"",
"width=\"275\" valign=\"top\" style=\"text-align:center; border:solid 1px #DBDBDB\"",
"width=\"65\" valign=\"top\" style=\"text-align:center; border:solid 1px #DBDBDB\"",
"width=\"180\" valign=\"top\" style=\"text-align:center; border:solid 1px #DBDBDB\"",
"width=\"85\" valign=\"top\" style=\"text-align:center; border:solid 1px #DBDBDB\"",
"width=\"70\" valign=\"top\" style=\"text-align:center; border:solid 1px #DBDBDB\""
);
var Spaltenformatierungen = new Array(
"width=\"220\" style=\"font-family:Verdana; text-align:left; border:solid 1px #DBDBDB\"",
"width=\"275\" style=\"font-family:Verdana; text-align:left; border:solid 1px #DBDBDB\"",
"width=\"65\" style=\"font-family:Verdana; text-align:center; border:solid 1px #DBDBDB\"",
"width=\"180\" style=\"font-family:Verdana; text-align:left; border:solid 1px #DBDBDB\"",
"width=\"85\" style=\"font-family:Verdana; text-align:center; border:solid 1px #DBDBDB\"",
"width=\"70\" style=\"font-family:Verdana; text-align:center; border:solid 1px #DBDBDB\""
);
var Spaltensortierungen = new Array(
"alphabetisch","numerisch","numerisch","numerisch"
);
var Tabellenformatierung = "border=\"1\" style=\"border:solid 1px #DBDBDB\" cellspacing=\"0\"";
var Ordinalzahlenspalte = 1;
var Ordinalzahlenspaltenformatierung = "width=\"30\" style=\"text-align:center; border:solid 1px #DBDBDB\"";
var IconNormalAuf = "<img src=\"normal_auf.png\" width=\"14\" height=\"12\" border=\"0\" alt=\"\">";
var IconNormalAb = "<img src=\"normal_ab.png\" width=\"14\" height=\"12\" border=\"0\" alt=\"\">";
var IconSortiertAuf = "<img src=\"sortiert_auf.png\" width=\"14\" height=\"12\" border=\"0\" alt=\"\">";
var IconSortiertAb = "<img src=\"sortiert_ab.png\" width=\"14\" height=\"12\" border=\"0\" alt=\"\">";
var Sortierzeile = "";
function Erzeuge_Sortierzeile(Nummer,Richtung) {
Sortierzeile = "<tr>";
if(Ordinalzahlenspalte)
Sortierzeile += "<th " + Ordinalzahlenspaltenformatierung + "> <\/th>";
for(var j = 0; j < Spalten; ++j) {
Sortierzeile += "<th " + Spaltenformatierungen[j] + ">";
if(Richtung == "aufsteigend" && j == Nummer) {
Sortierzeile += IconSortiertAuf + " ";
Sortierzeile += "<a href=\"javascript:Sortiere_nach_Spalte(" + j + ",'" + Spaltensortierungen[j] + "','absteigend')\">" + IconNormalAb + "</a>";
}
else if(Richtung == "absteigend" && j == Nummer) {
Sortierzeile += "<a href=\"javascript:Sortiere_nach_Spalte(" + j + ",'" + Spaltensortierungen[j] + "','aufsteigend')\">" + IconNormalAuf + "</a>";
Sortierzeile += " " + IconSortiertAb;
}
else {
Sortierzeile += "<a href=\"javascript:Sortiere_nach_Spalte(" + j + ",'" + Spaltensortierungen[j] + "','aufsteigend')\">" + IconNormalAuf + "</a> ";
Sortierzeile += "<a href=\"javascript:Sortiere_nach_Spalte(" + j + ",'" + Spaltensortierungen[j] + "','absteigend')\">" + IconNormalAb + "</a><\/td>";
}
Sortierzeile += "<\/th>";
}
Sortierzeile += "<tr>";
}
function Sortiere_nach_Spalte(Nummer,Art,Richtung) {
var Spaltendaten = new Array();
var Vergleichsdaten = new Array();
var SortierIndex = new Array();
for(var i = 0; i < Zeilen; ++i)
Spaltendaten[i] = Vergleichsdaten[i] = Tabellendaten[i * Spalten + Nummer];
if(Art == "alphabetisch") Spaltendaten.sort();
if(Art == "numerisch") Spaltendaten.sort(Numsort);
if(Richtung == "absteigend") Spaltendaten.reverse();
for(i = 0; i < Zeilen; ++i)
for(var j = 0; j < Zeilen; ++j)
if(Spaltendaten[i] == Vergleichsdaten[j])
SortierIndex[i] = j;
var Speicher;
for(i = 0; i < Zeilen; ++i)
for(j = 0; j < Spalten; ++j)
sortierte_Tabellendaten[i * Spalten + j] = Tabellendaten[SortierIndex[i] * Spalten + j];
Erzeuge_Sortierzeile(Nummer,Richtung);
Schreibe_Tabelle(sortierte_Tabellendaten);
}
function Schreibe_Tabelle(Array) {
var Tabelleninhalt = "";
Tabelleninhalt += "<table " + Tabellenformatierung + ">";
Tabelleninhalt += "<thead><tr>";
if(Ordinalzahlenspalte)
Tabelleninhalt += "<th " + Ordinalzahlenspaltenformatierung + "> <\/th>";
for(var j = 0; j < Spalten; ++j)
Tabelleninhalt += "<th " + Spaltenueberschriftformatierungen[j] + ">" + Spaltenueberschriften[j] + "<\/th>";
Tabelleninhalt += "<\/tr>";
Tabelleninhalt += Sortierzeile;
Tabelleninhalt += "<\/thead>";
Tabelleninhalt += "<tfoot><\/tfoot>";
Tabelleninhalt += "<tbody>";
for(var i = 0; i < Zeilen; ++i) {
Tabelleninhalt += "<tr>";
if(Ordinalzahlenspalte)
Tabelleninhalt += "<td " + Ordinalzahlenspaltenformatierung + ">" + (i+1) + ".<\/td>";
for(var j = 0; j < Spalten; ++j)
Tabelleninhalt += "<td " + Spaltenformatierungen[j] + ">" + Array[i * Spalten + j] + "<\/td>";
Tabelleninhalt += "<\/tr>";
}
Tabelleninhalt += "<\/tbody>";
Tabelleninhalt += "<\/table>";
if(document.getElementById)
document.getElementById("Tabelle").innerHTML = Tabelleninhalt;
else if(document.all)
document.all.Tabelle.innerHTML = Tabelleninhalt;
else if(document.layers) {
document.Tabelle.document.open();
document.Tabelle.document.write(Tabelleninhalt);
document.Tabelle.document.close();
}
}
function Numsort(a,b)
{ return a-b; }
</script>
<title>Tabelle</title>
</head>
<body onLoad="Erzeuge_Sortierzeile(-1,''); Schreibe_Tabelle(Tabellendaten);">
<div id="Kopfbereich">
<h3>Tabelle</h3>
<noscript>
<p>Die Daten auf dieser Seite lassen sich nur mit JavaScript-fähigen Browsern und mit eingeschaltetem JavaScript anzeigen!</p>
</noscript>
</div>
<div id="Tabelle"></div>
</body>
</html>
Hallo,
Woran liegt das?
Keine Ahnung. Was aber ganz sicher ist, dass Du einen Bug in deinem Quellcode hast: Du versteckst das Javascript mit <!-- und löst den Kommentar nicht wieder auf. D.h. dass alles was nach "<script type="text/javascript">" kommt, nur noch Kommentar ist.
Dieses sollte Dir selbst schon aufgefallen sein, als Du den Quelltext hier als html-code formatiert hast und alles ab o.a. Stelle in grau dargestellt wird.
MfG
cross
Also was ich nun herausgefunden habe:
Klickt man auf den Link und sortiert z.B. nach Titeln, wird nur der Eintrag "Queen - Bohemian Rhapsody" doppelt angezeigt. Das liegt scheinbar daran, dass noch ein anderer "Bohemian Rhapsody" Eintrag von "UC Men's Octet" besteht - dieser wird aber einfach Überschrieben.
Ebenso verhält es sich mit der Sortierung der anderen Punkte. Klicke ich auf "Platzierung sortieren", so habe ich 64 doppelte Einträge, die anderen 64 verschwinden spurlos. Lediglich 23 Einträge sind einzelnd, weil es keinen Gegenwert gibt (Beim 1. Contest haben 64, beim zweiten 87 Personen mitgemacht)
Wie kann ich dieses überschreiben verhindern?
Hallo,
Also was ich nun herausgefunden habe:
Und was ich herausgefunden habe, ist, dass Dein Tabellearray Sonderzeichen hat, wie z.B. das Hochkomma ' und [ drin hat, was sich sicherlich als hinderlich bei der Verarbeitung erweisen könnte:
"The Donots","Stop the Clocks","1","[Sportfreund]","4","123",
<cut>
"The Who","Baba O'riley","1","MrWilliams","12","81",
usw ..
MfG
cross
Wo und wann muss dieses <cut> eingesetzt werden?
Aber daran kann es nicht liegen - schließlich besteht das Problem auch ohne Sonderzeichen.
Hallo Forum,
Wo und wann muss dieses <cut> eingesetzt werden?
Gar nicht! Es ist lediglich mein Ausdruck dafür, dass ich nur einen Ausschnitt (cut) Deines Quelltextes gepostet habe.
Aber daran kann es nicht liegen - schließlich besteht das Problem auch ohne Sonderzeichen.
Das Du das auch ohne Sonderzeichen probiert hast, war in meiner Glaskugel nicht klar zu erkennen - sorry dafür. ;)
MfG
cross
Verstehe ich nicht... müsste eigentlich funktionieren.
Kann mir keiner helfen? Hab schon einiges ausprobiert mit plus und minus, aber da geht nix.