Подтвердить что ты не робот

Параметры сортировки в списке выбора с помощью javascript/jQuery.. но не в алфавитном порядке

Я ищу функцию, которая возьмет список опций в списке выбора и отсортирует их по алфавиту, но с твист. Все значения с текстом "NA" должны быть сдвинуты в нижнюю часть списка.

Итак, заданный список -

<select>
    <option value="1">Car</option>
    <option value="2">Bus</option>
    <option value="3">NA</option>
    <option value="4">Bike</option>
    <option value="5">Tractor</option>
    <option value="6">NA</option>
</select>

Мы должны в конечном итоге -

<select>
    <option value="4">Bike</option>
    <option value="2">Bus</option>
    <option value="1">Car</option>
    <option value="5">Tractor</option>
    <option value="3">NA</option>
    <option value="6">NA</option>
</select>

Порядок НС не важен.

И не спрашивайте, почему я не могу просто удалить NA (или почему будет несколько вариантов с теми же текстами, но с разными базовыми значениями, потому что я тоже не согласен с ним.

4b9b3361

Ответ 1

demo: http://jsfiddle.net/4bvVz/

function NASort(a, b) {    
    if (a.innerHTML == 'NA') {
        return 1;   
    }
    else if (b.innerHTML == 'NA') {
        return -1;   
    }       
    return (a.innerHTML > b.innerHTML) ? 1 : -1;
};

$('select option').sort(NASort).appendTo('select');

Ответ 2

var sb = $('select');

sb.append(sb.find('option').sort(function(a, b){
    return (
        a = $(a).text(),
        b = $(b).text(),
        a == 'NA' ? 1 : b == 'NA' ? -1 : 0|a > b
    );
}));

Ответ 3

Если у вас более одного выбора на странице (несколько выборок), используйте это:

function NASort(a, b) {
    if (a.innerHTML == 'NA') {
        return 1;
    }
    else if (b.innerHTML == 'NA') {
        return -1;
    }
    return (a.innerHTML > b.innerHTML) ? 1 : -1;
};

$('select').each(function( index ) {
    $(this).find('option').sort(NASort).appendTo($(this));
});

Ответ 4

Я внес некоторые изменения в исходную функцию, и она отлично работала.

function NASort(a, b) {  
    console.log(a.innerHTML.substr(0, 1).toLowerCase() + ' > ' + b.innerHTML.substr(0, 1).toLowerCase());
    return (a.innerHTML.substr(0, 1).toLowerCase() > b.innerHTML.substr(0, 1).toLowerCase()) ? 1 : -1;
};

$('select option').sort(NASort).appendTo('select');