Сортировать Divs в Jquery на основе атрибута "data-sort"?
Если у меня есть несколько дивов:
<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>
и я динамически создаю divs:
<div data-sort='14'>div1</div>
<div data-sort='6'>div1</div>
<div data-sort='9'>div1</div>
Как я могу заставить их просто сортировать в уже загруженные дивы по порядку, без необходимости перезагружать все дивы?
Я думаю, что мне нужно будет построить массив значений сортировки данных всех дивов на экране, а затем посмотреть, где новые дивы вписываются, но я не уверен, что это лучший способ.
любая помощь приветствуется
4 ответа:
используйте эту функцию
$('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; })
вы можете вызвать эту функцию сразу после добавления новых divs
Я сделал это в функцию 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", и все ваши маленькие дивы внутри:
$("#boo").sortDivs ();
вам нужно "? 1 : -1" из-за ошибки в Chrome, без этого он не будет сортировать более 10 ДИВС! http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html
ответил на тот же вопрос здесь:
репост:
после поиска по многим решениям я решил блог о том, как сортировать в jquery. Таким образом, шаги для сортировки объектов jquery "array-like" по атрибуту данных...
- выберите все объекты через селектор 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() работает.
надеюсь, что это помогает!
я использовал это для сортировки галереи изображений, где массив сортировки будет изменен вызовом 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>
Скрипка:http://jsfiddle.net/ruys9ksg/