У меня есть неупорядоченный список, который я хочу сортировать. Все элементы списка имеют data-index
данных атрибута data-index
с соответствующим номером индекса списка. Я хочу заказать список в соответствии с этим номером индекса, однако я хочу игнорировать элемент списка, у которого есть класс .active
Поэтому в моей следующей структуре я пытаюсь вернуть все элементы списка после того, как класс активен в порядке их data-index
. Элемент списка с классом .active
следует игнорировать и оставаться на вершине.
<ul>
<li class="active" data-index="8">Item 8</li>
<li class="inactive" data-index="6">Item 6</li>
<li class="inactive" data-index="5">Item 5</li>
<li class="inactive" data-index="3">Item 3</li>
<li class="inactive" data-index="4">Item 4</li>
<li class="inactive" data-index="2">Item 2</li>
<li class="inactive" data-index="1">Item 1</li>
<li class="inactive" data-index="7">Item 7</li>
<li class="inactive" data-index="9">Item 9</li>
</ul>
Как мне это сделать?
Я включил jsfiddle с моей базовой структурой.
Любая помощь будет оценена по достоинству.
$('#sortList').click(function(){
$('ul .inactive').sort(function(a,b) {
return $(a).data('index') > $(b).data('index');
}).appendTo('ul');
});
Пытаться
$('#sortList').click(function () {
var $active = $('.active');
var els = $active.nextAll().sort(function(e1, e2){
return +$(e1).data('index') - +$(e2).data('index');
}).insertAfter($active);
});
Демо: скрипка
Это сделало бы работу,
$('#sortList').click(function () {
$("ul li.inactive").sort(function (a, b) {
return +$(a).data('index') - +$(b).data('index');
}).appendTo($("ul"));
});
<ul>
<li class="inactive" data-index="8">Item 8</li>
<li class="inactive" data-index="6">Item 6</li>
<li class="inactive" data-index="5">Item 5</li>
<li class="inactive" data-index="3">Item 3</li>
<li class="inactive" data-index="4">Item 4</li>
<li class="inactive" data-index="2">Item 2</li>
<li class="inactive" data-index="1">Item 1</li>
<li class="inactive" data-index="7">Item 7</li>
<li class="inactive" data-index="9">Item 9</li>
</ul>
<button id="sortList">Sort this list</button>
$('#sortList').click(function(){
$('.inactive').sort(function(x,y) {
return $(x).data('index') - $(y).data('index');
}).appendTo($('.inactive').parent());
});