2013-06-10 5 views
0

У меня проблема с выбором. Мне нужно отсортировать в алфавитном порядке различные варианты выбора (с опцией text и auguali). Я нашел интересный скрипт, который, кажется, работает только для одного параметра, не имеет множественного выбора. Есть ли способ сортировать каждый выбор? Например, нажмите, чтобы выбрать заказ, но теперь перекрывайте эту опцию.Сортировать по алфавиту more select options

$('.button').click(function() { 
    var options = $('select option'); 
    var arr = options.map(function(_, o) { 
     return { 
      t: $(o).text(), 
      v: o.value 
     }; 
    }).get(); 
    arr.sort(function(o1, o2) { 
     return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; 
    }); 
    options.each(function(i, o) { 
     console.log(i); 
     o.value = arr[i].v; 
     $(o).text(arr[i].t); 
    }); 
}); 

jsfiddle

Благодаря

ответ

0

Таким образом вы получаете все опции из ВСЕХ выбирает. Вот почему у вас будет много дубликатов.

Вы должны выполнять итерацию по каждому элементу и сортировать только его параметры.

Кроме того, вы можете использовать localeCompare для сравнения двух строк.

$('button#sort').click(function() { 
    $('select').each(function() { 
     var options = $(this).children('option'); 
     options.sort(function (optionA, optionB) { 
      return optionA.value.localeCompare(optionB.value); 
     }); 
     $(this).empty().append(options); 
    }); 
}); 

jsFiddle

1

Ваш код пытаются сортировать все опции в DOM, вам необходимо отсортировать каждый подбирают индивидуально.

Вы можете вставить свой код в функцию и использовать уникальный идентификатор для каждого выбора, здесь рабочий пример:

<!doctype html> 
<html lang="it"> 
    <meta charset="utf-8" /> 
    <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
     <script> 
     $(function() { 
      $('.button').click(function() { 
      sortSelect('prima'); 
     }) 
     $('.button_2').click(function() { 
      sortSelect('seconda'); 
     }) 

     function sortSelect(selectId) { 
      var options = $('select#'+selectId+' option'); 
      var arr = options.map(function(_, o) { 
       return { 
        t: $(o).text(), 
        v: o.value 
       }; 
      }).get(); 
      arr.sort(function(o1, o2) { 
       return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; 
      }); 
      options.each(function(i, o) { 
       console.log(i); 
       o.value = arr[i].v; 
       $(o).text(arr[i].t); 
      }); 
     }; 
    }); 
    </script> 
</head> 
<body> 
    <select id="prima"> 
     <option value="uno">uno</option> 
     <option value="due">due</option> 
     <option value="tre">tre</option> 
    </select> 
    <select id="seconda"> 
     <option value="uno">uno</option> 
     <option value="due">due</option> 
     <option value="tre">tre</option> 
    </select> 
    <button class="button">Ordina la prima select</button> 
    <button class="button_2">Ordina la seconda select</button> 
</body> 

Смежные вопросы