.each цикл не работает вместе с .sort в html

0

Мой следующий код отлично работает для сортировки по алфавиту по всему элементу 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
 })))

Пожалуйста, ответьте.

  • 0
    Можете ли вы объяснить, что вы хотите повторить здесь? Вы хотите отсортировать элементы опций и перебрать каждый из них?
  • 0
    @RGraham Я хочу отсортировать каждый элемент «Выбрать тег» по алфавиту
Теги:
sorting
each

5 ответов

1

Вы хотите вызвать .each на ваши выбранных элементах, а затем получить каждый ребенок выберите option элементы, сортировать их и назначить их отдельные элементы снова.

$("select").each(function(idx, el) {
  $(el).html( $(el).children("option").sort(your_sort) );
});
  • 0
    Лучший ответ из всех. Хорошо сделано.
  • 0
    @ Томалак: хорошо, я думал, что jQuery достаточно умен, чтобы передавать расширенные объекты в функцию.
Показать ещё 1 комментарий
1

Не изменяйте 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 перемещает его из предыдущего местоположения.

1

использование

$("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 
    }))
});

Вы, например, не работаете, потому что вы перебираете каждый параметр, а не каждый из них, и сортируете, не привязанные к чему-либо.

  • 0
    В этом ответе есть те же проблемы, которые указаны в моем первоначальном ответе. Селектор $ (". Option") будет тянуть каждый параметр на странице, вместо того, чтобы ограничивать его текущим выбором.
  • 0
    Вы правы, @KevinBowersox, исправлена ошибка.
0

Синтаксис выключен, 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/

  • 2
    Не будет ли это просто повторять каждый параметр и «сортировать» его, оставляя все параметры в том же порядке, в котором они были изначально?
  • 0
    @RGraham Да, я пропустил это. Простите только что проснулся
Показать ещё 7 комментариев
0

Ваш.Sort не привязан ко всему, он просто сидит сам по себе.

  • 0
    Можете ли вы сказать мне, как это будет работать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню