Причины, по которым вам следует использовать массивы:
- NodeLists доступны только для чтения (к ним нельзя применить сортировку массива)
- Операции с массивами выполняются очень быстро по сравнению с операциями DOM
Таким образом, вам необходимо преобразовать параметры в массив, а затем применить к нему функцию sort
с помощью пользовательской функции сравнения. Наконец, вы добавляете элементы обратно в правильном порядке.
Использование
sortSelect("selection_id");
Код [ Посмотреть в действии ]
(function(window){
// array functions are not working
// on nodeLists on IE, we need to
// to convert them to array
function toArray( obj ) {
var i, arr = [];
for ( i = obj.length; i--; ){
arr[i] = obj[i];
}
return arr;
}
// custom compare function for sorting
// by the option's value
function sortByName( a, b ) {
if ( a.value < b.value ) return -1;
else if( a.value > b.value ) return 1;
else return 0;
}
window.sortSelect = function(id) {
// select the elements to be ordered
var sel = document.getElementById(id),
items = sel.getElementsByTagName("option"),
len = items.length;
// convert to array, to make sorting possible
items = toArray( items );
// do the item sorting by their value
items = items.sort( sortByName );
// append them back to the parent in order
for ( var i = 0; i < len; i++ ) {
sel.appendChild( items[i] );
}
};
})(this);
Проверено на: IE5.5 +, FF2 +, Chrome, Opera 9.6 +