Мой следующий код отлично работает для сортировки по алфавиту по всему элементу select
тега.
$("select").html($("option").sort(function (a, b) {
return a.text.toUpperCase() == b.text.toUpperCase() ? 0 : a.text.toUpperCase() < b.text.toUpperCase() ? -1 : 1
}))
Но я хочу применить эту сортировку для каждого элемента select
отдельно. для этого я использую цикл ".each", но он не работает вместе с.sort. Я использую следующее:
$("select").html($("option").each(.sort(function (a, b) {
return a.text.toUpperCase() == b.text.toUpperCase() ? 0 : a.text.toUpperCase() < b.text.toUpperCase() ? -1 : 1
})))
Пожалуйста, ответьте.
Вы хотите вызвать .each
на ваши выбранных элементах, а затем получить каждый ребенок выберите option
элементы, сортировать их и назначить их отдельные элементы снова.
$("select").each(function(idx, el) {
$(el).html( $(el).children("option").sort(your_sort) );
});
Не изменяйте HTML элемента <select>
. Просто переустановите существующие элементы <option>
.
function byTextCaseInsensitive(a, b) {
var ta = a.text.toUpperCase(),
tb = b.text.toUpperCase();
return ta === tb ? 0 : ta < tb ? -1 : 1;
}
$("select").each(function () {
$(this).find("option").sort(byTextCaseInsensitive).appendTo(this);
});
Подсказка: добавление существующего узла внутри HTML DOM перемещает его из предыдущего местоположения.
использование
$("select").each(function() {
var $this = $(this);
$this.html($("option", $this).sort(function (a, b) {
return a.text.toUpperCase() == b.text.toUpperCase() ? 0 : a.text.toUpperCase() < b.text.toUpperCase() ? -1 : 1
}))
});
Вы, например, не работаете, потому что вы перебираете каждый параметр, а не каждый из них, и сортируете, не привязанные к чему-либо.
Синтаксис выключен, each
метод принимает функцию, выполняемую для каждого элемента в выбранном наборе элементов. Попробуйте сопоставить код сортировки с функцией и поставьте для each
:
$("select").each(function(){
$(this).html($(this).children("option").sort(function (a, b) {
return a.text.toUpperCase() == b.text.toUpperCase() ? 0 : a.text.toUpperCase() < b.text.toUpperCase() ? -1 : 1
}));
});
JS Fiddle: http://jsfiddle.net/MwDQz/
Ваш.Sort не привязан ко всему, он просто сидит сам по себе.