Сортировать div в jQuery на основе атрибута "сортировка данных"?
Если у меня есть несколько дел:
<div data-sort='1'>div1</div>
<div data-sort='4'>div4</div>
<div data-sort='8'>div8</div>
<div data-sort='12'>div12</div>
<div data-sort='19'>div19</div>
И я динамически создаю div:
<div data-sort='14'>div1</div>
<div data-sort='6'>div1</div>
<div data-sort='9'>div1</div>
Как я могу заставить их просто отсортировать по div'ам, уже загруженным по порядку, без перезагрузки всех div'ов?
Я думаю, что мне нужно будет создать массив значений сортировки данных всех элементов div на экране, а затем посмотреть, куда вписываются новые элементы div, но я не уверен, что это лучший способ.
Ответы
Ответ 1
использовать эту функцию
$('div').sort(function (a, b) {
var contentA =parseInt( $(a).attr('data-sort'));
var contentB =parseInt( $(b).attr('data-sort'));
return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
});
Вы можете вызвать эту функцию сразу после добавления новых div
Ответ 2
Я сделал это в функцию jQuery:
jQuery.fn.sortDivs = function sortDivs() {
$("> div", this[0]).sort(dec_sort).appendTo(this[0]);
function dec_sort(a, b){ return ($(b).data("sort")) < ($(a).data("sort")) ? 1 : -1; }
}
Итак, у вас есть большой div, похожий на "#boo" и все ваши маленькие div внутри:
$( "# бух" ) sortDivs();.
Вам нужно "? 1: -1" из-за ошибки в Chrome, без этого он не будет сортировать более 10 div! http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html
Ответ 3
Ответили на тот же вопрос здесь:
Чтобы сделать репост:
После поиска многих решений я решил написать в блоге о том, как сортировать в jquery. Таким образом, шаги для сортировки jquery "массивоподобных" объектов по атрибуту данных...
- выбрать все объекты с помощью селектора jquery
- преобразовать в фактический массив (не в массив, похожий на объект jquery)
- сортировать массив объектов
- преобразовать обратно в объект jquery с массивом объектов dom
Html
<div class="item" data-order="2">2</div>
<div class="item" data-order="1">1</div>
<div class="item" data-order="4">4</div>
<div class="item" data-order="3">3</div>
Простой селектор jquery
$('.item');
[<div class="item" data-order="2">2</div>,
<div class="item" data-order="1">1</div>,
<div class="item" data-order="4">4</div>,
<div class="item" data-order="3">3</div>
]
Сортируем по порядку данных
function getSorted(selector, attrName) {
return $($(selector).toArray().sort(function(a, b){
var aVal = parseInt(a.getAttribute(attrName)),
bVal = parseInt(b.getAttribute(attrName));
return aVal - bVal;
}));
}
> getSorted('.item', 'data-order')
[<div class="item" data-order="1">1</div>,
<div class="item" data-order="2">2</div>,
<div class="item" data-order="3">3</div>,
<div class="item" data-order="4">4</div>
]
Посмотрите, как работает getSorted().
Надеюсь это поможет!
Ответ 4
вы можете попробовать jquery, там есть хороший плагин для сортировки.
http://james.padolsey.com/javascript/sorting-elements-with-jquery/
Ответ 5
Я использовал это для сортировки галереи изображений, где массив сортировки был изменен вызовом ajax. Надеюсь, это может быть полезно кому-то.
var myArray = ['2', '3', '1'];
var elArray = [];
$('.imgs').each(function() {
elArray[$(this).data('image-id')] = $(this);
});
$.each(myArray,function(index,value){
$('#container').append(elArray[value]);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div id='container'>
<div class="imgs" data-image-id='1'>1</div>
<div class="imgs" data-image-id='2'>2</div>
<div class="imgs" data-image-id='3'>3</div>
</div>