@pvgdrk

Как отсортировать элементы html контейнера по внешнему списку?

Есть несколько элементов:
<div id="testWrapper">
    <div id="Pushkin">
    <div id="Lermontov">
    <div id="Harms">
    <div id="Erofeev">
  </div>


И есть список: order = ['Erofeev', 'Harms', 'Pushkin'] согласно которому надо отсортировать элементы
Вроде бы это делается методом sort:
$('#testWrapper').children().sort(function(a, b) {
    return $.inArray($(a).attr('id'), qorder) < $.inArray($(b).attr('id'), qorder)
}).appendTo('#testWrapper');

где inArray определяет место элемента в списке. Однако если какого-то элемента из списка order нету в получается фигня - не нашедшие себе места элементы встают куда попало. как с это разрешить?
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
Deonisius
@Deonisius
Родился в 11110110111 году, 11000 января.
Пример в песочнице
var order = ['Erofeev', 'Harms', 'Pushkin'],
    ia, ib;
$('#testWrapper div').sort(function(a, b) {
    ia = order.indexOf(a.id);
    ib = order.indexOf(b.id);
    if (ia < 0 && ib >= 0) {
        return 1;
    }
    if (ia >= 0 && ib < 0) {
        return -1;
    }
    return ia - ib;
}).appendTo('#testWrapper');


P.S. Можно чуть покороче записать
var order = ['Erofeev', 'Harms', 'Pushkin'],
    ia, ib;
$('#testWrapper div').sort(function(a, b) {
    ia = order.indexOf(a.id);
    ib = order.indexOf(b.id);
    if (ia < 0 || ib < 0) {
        return -ia - -ib;
    }
    return ia - ib;
}).appendTo('#testWrapper');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы