Code: Select all
function alphabetizeSelectListItems(theOldList) {
var theNewList;
var insertOptionHere;
theNewList = theOldList.cloneNode(true);
while(theOldList.options.length > 0) {
theOldList.options[0].remove();
}
while(theNewList.options.length > 0) {
insertOptionHere = null;
for(var optionCounter = 0; optionCounter < theOldList.length; optionCounter++) {
if(theNewList.options[0].innerHTML.toLocaleUpperCase().localeCompare(theOldList.options[optionCounter].innerHTML.toLocaleUpperCase()) < 0) {
insertOptionHere = optionCounter;
break;
}
}
if(insertOptionHere == null) {
theOldList.appendChild(theNewList.options[0]);
} else {
theOldList.insertBefore(theNewList.options[0], theOldList.options[insertOptionHere]);
}
}
theNewList.remove();
}
Das Problem dabei ist, dass alles außer den Ereignis-Listenern kopiert wird. Ich muss also dieselbe Auswahlliste mit denselben Optionen verwenden, sie aber verschieben. Ich habe mir Beispiele für die Blasensortierung angesehen und versucht, sie an Optionselemente statt an Array-Elemente anzupassen, aber wenn ich zwei Elemente vertausche, muss ich eines in einem temporären Element speichern, und dadurch wird der Ereignis-Listener entfernt.Ist das möglich? Gibt es eine Möglichkeit, ausgewählte Listenoptionen auszutauschen und gleichzeitig die Ereignis-Listener beizubehalten?