Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сохранить положение option в списке, чтобы вернуть его при нажатии на кнопку?

Константин Ефименко Гуру (3721), закрыт 4 года назад
У меня есть готовый код, но он возвращает выбранные позиции в конец списка.
Ссылка тут: https://jsfiddle.net/0j87tz4v/

Есть ли способ сохранить позиции, чтобы вернуть их в обоих select(ах), так чтобы список в обоих колонках был по порядку.

На самом деле, я пытался сделать что-то вроде:
$(document).ready(function(){
var $filter = $(".filter");
$filter.children().detach().sort(function(a, b) {
return $(a).text().localeCompare($(b).text());
}).appendTo($filter);
});

Но фильтрация списка по алфавиту, не работает ровно так, как мне нужно. Сначала происходит фильтрация, а уже потом переносится из списка в список. Из-за этого сбивается положение элементов в списке, и переносится совсем не то, что я выбрал.

Есть ли какой-то хороший способ сделать это?
Лучший ответ
Elepsis Eclipse Гений (64069) 4 года назад
Ну главная проблема в том, чтобы определить место, куда надо поставить опцию... решил собрать внутренние тексты опций в отдельный массив, сначала отсортировать его, а оттуда уже достать номер нужной опции - - https://jsfiddle.net/OPTlMUS/2uoav46y/ Чуть повырезал код... я тогда затупил и забыл, что если append - то элемент и так переносится куда указали, не нужно клонировать, а предыдущий удалять)

P.s. сортировка идет именно по тексту, как в словаре... т. е. "Текст 5" будет больше чем "Текст7"

Если нужно будет независимо от текста, по номерам, тогда через регулярку, достать оттуда число... a.match(/\d+/)[0] < b.match(/\d+/)[0]
Константин ЕфименкоГуру (3721) 4 года назад
В первом select, находится список ФИО из БД. Если тестировать его сначала списка, то вроде бы работает нормально. Но если, добавить в правую колонку ФИО начинающиеся на [Я, Ш, Х и Т], а после вернуть тот, что на "Я", он попадёт не в туда от куда был взят, а в середину списка на "Х". И так происходит со всеми значениями, если тестировать с конца. То есть, может он и возвращает, но не в свои позиции. Другими словами, нужно как то, отсортировать список в алфавитном порядке после перемещения.

Хотя может я не прав и это решаемо.
Константин ЕфименкоГуру (3721) 4 года назад
Вообщем, я сделал пока что так:
$('.remove').on('click', function() {
$('.right .selectedR').each( moveOption );
var $filter = $(".left");
$filter.children().detach().sort(function(a, b) {
return $(a).text().localeCompare($(b).text());
}).appendTo($filter);
});

Но это имхо костыль, кроме того, ФИО которые на английском, по умолчанию выводятся сверху, а уже затем на русском. Но при данной сортировке, те что на английском переносятся в конец.
Elepsis Eclipse Гений (64069) https://jsfiddle.net/OPTlMUS/auL8qzht/ -- ээм... ничего не меняя в коде, потестил с буквами, всё по алфавиту выводится... (ну кроме Ё). В ваших тестах точно все имена начинались с заглавных букв? Может в функции дописать .toUpperCase()...
Остальные ответы
Похожие вопросы