Javascript / jQuery: Réorganiser les divs selon les valeurs des attributs de données

Duplication possible:
Trier l'élément par valeur numérique de l'attribut de données

Je souhaite réorganiser les divs en fonction d'un attribut de données sur eux, allant de l'entier le plus élevé au plus bas. À l'heure actuelle, je pousse toutes les données dans un tableau, mais je ne sais pas comment procéder. Comment puis-je utiliser cela pour réorganiser les divs dans leur div parental?

var prices = new Array(); $(this).children('.listing-item').each(function() { var price = parseInt($(this).attr('data-listing-price')); prices.push(price) }); prices.sort(function(a,b){return ba}); 

Cela me donne un tableau comme 139,129,129,109,109,84 par exemple. Maintenant, mon idée était de faire passer les divs à un autre moment avec un sélecteur comme ceci:

 $('.listing-item[data-listing-price="' + prices[0] + '"]') 

Mais je ne sais pas comment déplacer les divs (le div avec l'entier d'attribut de données le plus élevé devrait passer au sommet et ainsi de suite. Une idée?

Voici la solution

HTML:

 <div id="list"> <div class="listing-item" data-listing-price="2">2</div> <div class="listing-item" data-listing-price="3">3</div> <div class="listing-item" data-listing-price="1">1</div> <div class="listing-item" data-listing-price="4">4</div> </div> 

JS:

 var divList = $(".listing-item"); divList.sort(function(a, b){ return $(a).data("listing-price")-$(b).data("listing-price") }); $("#list").html(divList); 

JSFiddle:

http://jsfiddle.net/bittu4u4ever/ezYJh/1/

 var s = new Array; var i = 0; var x = $(".ch").length; $(".ch").each( function() { s[i] = $(this).data("id"); i++; }); var g = s.sort(function(a,b){return ab}); for(var c = 0; c < x; c++) { var div = g[c]; var d = $(".ch[data-id="+div+"]").clone(); var s = $(".ch[data-id="+div+"]").remove(); $(".pa").append(d); } 

Fiddle de travail

Vous pouvez adapter la fonction décrite ici: Comment puis-je trier une liste par ordre alphabétique en utilisant jQuery? Et modifiez simplement la fonction de tri (' < ')

 <div id="foo"> <div class="test" data-listing-price="30">30</div> <div class="test" data-listing-price="62">62</div> <div class="test" data-listing-price="11">11</div> <div class="test" data-listing-price="43">43</div> </div> 

Dans votre js (nombre le plus élevé au plus bas):

 var div = $('#foo'); var listitems = div.children('div.test').get(); listitems.sort(function (a, b) { return (+$(a).attr('data-listing-price') > +$(b).attr('data-listing-price')) ? -1 : (+$(a).attr('data-listing-price') < +$(b).attr('data-listing-price')) ? 1 : 0; }) $.each(listitems, function (idx, itm) { div.append(itm); }); 

http://jsfiddle.net/NfVxk/