Select Options sortieren
michael
- javascript
Hallo,
ich will eine bestehende Option-Liste via JS um eine Option erweitern. Die Liste soll aber alphabethisch sortiert bleiben. Hierfür lese ich mir die Liste in ein Array, lösche die Liste, sortiere das Array und schreibe es zurück in die Liste. Das funktioniert auch ganz gut.
Das Problem ist aber das sortieren! Das scheint partou nicht zu klappen ;(
Weiss jemand warum?
Hier mein Code:
addOption(document.GetElementById("meinSelect"), "opt", "1");
function addOption(target, option, value) {
var opts = new Array();
while(target.length){
var oldopt = new Array();
oldopt["value"] = target.options[0].value;
oldopt["text"] = target.options[0].text;
opts.push(oldopt);
target.remove(0);
}
var newopt = new Array();
newopt["value"] = value;
newopt["text"] = text;
opts.push(newopt);
opts.sort(sortByOptionText);
for(var i=0; i<opts.length; i++){
target.options.add(new Option(opts[i]["text"], opts[i]["value"], false, false));
}
}
function sortByOptionText(a, b) {
var x = a["text"];
var y = b["text"];
return (x < y);
}
Hello,
Weiss jemand warum?
ich rate mal: sort() kann nicht mit Array-of-Array umgehen sondern erwartet direkt Werte. In Java müsstest du dafür den Objektvergleich selbst implementieren, über JavaScript denke ich mal lieber gar nicht nach.
Aber vielleicht weiß ja noch jemand was gegenteiliges...
MfG
Rouven
Ah! Ich habs! Es lag am return:
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
Vielen Dank soweit
Michael
Hallo Rouven,
ich rate mal: sort() kann nicht mit Array-of-Array umgehen ...
falsch geraten.
Gruß, Jürgen
Hello,
falsch geraten.
cool, wonach sortiert er denn, erster Eintrag im inneren Array?
MfG
Rouven
Hallo Rouven,
cool, wonach sortiert er denn, erster Eintrag im inneren Array?
nein. Sortiert wird so wie in der Vergleichsfunktion angegeben. Michael hat es schon richtig gezeigt.
Gruß, Jürgen
Hello,
nein. Sortiert wird so wie in der Vergleichsfunktion angegeben. Michael hat es schon richtig gezeigt.
ach verdammt, die Funktion da unten hab ich gar nicht mehr zur Kenntnis genommen...
MfG
Rouven