Si j'ai plusieurs divs:
<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>
Et je crée dynamiquement les divs:
<div data-sort='14'>div1</div>
<div data-sort='6'>div1</div>
<div data-sort='9'>div1</div>
Comment puis-je les amener à trier les div déjà chargés dans l’ordre, sans avoir à recharger tous les div?
Je pense que je devrais créer un tableau des valeurs de tri des données de tous les divs à l'écran, puis voir où les nouveaux divs s'intègrent, mais je ne suis pas sûr que ce soit la meilleure façon.
utiliser cette fonction
$('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;
});
vous pouvez appeler cette fonction juste après avoir ajouté de nouveaux divs
J'ai transformé cela en une fonction 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; }
}
Donc, vous avez une grosse div comme "#boo" et tous vos petits divs à l'intérieur:
$ ("# boo"). sortDivs ();
Vous avez besoin du "? 1: -1" à cause d'un bogue dans Chrome, sans cela, il ne triera pas plus de 10 divs! http://blog.rodneyrehm.de/archives/14-Sorting-Were-Doing-It-Wrong.html
Répondu à la même question ici:
Pour republier:
Après avoir recherché de nombreuses solutions, j'ai décidé de blog sur la façon de trier jquery . En résumé, les étapes pour trier les objets "ressemblant à un tableau" jquery par attribut de données ...
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>
Sélecteur JQuery simple
$('.item');
[<div class = "item" data-order = "2"> 2 </ div>, <div class = "item" data-order = "1"> 1 </ div>, <div class = "élément" data-order = "4"> 4 </ div>, <div class = "élément" data-order = "3"> 3 </ div>
Permet de trier ceci par ordre de données
function getSorted (sélecteur, attrName) { return $ ($ (sélecteur) .toArray (). sort (fonction (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 = "élément" data-order = "3"> 3 </ div>, <div class = "élément" data-order = "4"> 4 </ div>
Voir comment fonctionne getSorted ().
J'espère que cela t'aides!