Reputation: 12054
I want to sort that by usernames:
<div id="listPerformers">
<div class="performer" data-username="lula">lula</div>
<div class="performer" data-username="hotesse1">hotesse1 </div>
<div class="performer" data-username="marina">marina</div>
<div class="performer" data-username="sabrina">sabrina</div>
<div class="performer" data-username="aaa">aaa</div>
<div class="performer" data-username="hotesse2" >hotesse2 </div>
<div class="performer" data-username="julia">julia</div>
<div class="performer" data-username="misssexy">misssexy</div>
<div class="performer" data-username="guitarreblack">guitarreblack</div>
<div class="performer" data-username="blacklove">blacklove</div>
<div class="performer" data-username="ddd">ddd</div>
<div class="performer" data-username="eee">eee</div>
<div class="performer" data-username="anna">anna</div>
</div>
And I do use that jscript
$('.performer').sort(function(a,b){
return a.dataset.username > b.dataset.username
}).appendTo('#listPerformers')
Problem is: it is badly sorted:
julia
anna
comes in first positions !
Upvotes: 1
Views: 38
Reputation: 3536
$('.performer')
.sort(function(p, c) {
return (p.dataset.username > c.dataset.username) - (p.dataset.username < c.dataset.username);
}).appendTo('#performers-list');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="performers-list">
<div class="performer" data-username="lula">lula</div>
<div class="performer" data-username="hotesse1">hotesse1</div>
<div class="performer" data-username="marina">marina</div>
<div class="performer" data-username="sabrina">sabrina</div>
<div class="performer" data-username="aaa">aaa</div>
<div class="performer" data-username="hotesse2">hotesse2</div>
<div class="performer" data-username="julia">julia</div>
<div class="performer" data-username="misssexy">misssexy</div>
<div class="performer" data-username="guitarreblack">guitarreblack</div>
<div class="performer" data-username="blacklove">blacklove</div>
<div class="performer" data-username="ddd">ddd</div>
<div class="performer" data-username="eee">eee</div>
<div class="performer" data-username="anna">anna</div>
</div>
Upvotes: 0
Reputation: 22885
Your sort function is not correct. You need to return positive
, negative
or zero
value from compare function in case of greater than
, less than
or equal
.
$('.performer').sort(function(a,b){
if(a.dataset.username < b.dataset.username) return -1;
if(a.dataset.username > b.dataset.username) return 1;
return 0;
}).appendTo('#listPerformers');
Upvotes: 2