Reputation: 6620
I have a list of numbers that need to be sorted. I am using a function as following but it does not sort them properly.
<div class="mylist">
<div class="item" data-sid="0.98">
<p>0.98</p>
</div>
<div class="item" data-sid="4.29">
<p>4.29</p>
</div>
<div class="item" data-sid="0.98">
<p>0.98</p>
</div>
<div class="item" data-sid="23.59">
<p>23.59</p>
</div>
</div>
JS
$('#num').on('click', function() {
var s = $(this).data('sort');
if (s === 0) {
$(this).data('sort', 1);
$('.mylist > div').sort(function(a, b) {
return a.dataset.sid < b.dataset.sid
}).appendTo('.mylist')
} else {
$(this).data('sort', 0);
$('.mylist > div').sort(function(a, b) {
return a.dataset.sid > b.dataset.sid
}).appendTo('.mylist')
}
});
$('#num').on('click', function() {
var s = $(this).data('sort');
if (s === 0) {
$(this).data('sort', 1);
$('.mylist > div').sort(function(a, b) {
return a.dataset.sid < b.dataset.sid
}).appendTo('.mylist')
} else {
$(this).data('sort', 0);
$('.mylist > div').sort(function(a, b) {
return a.dataset.sid > b.dataset.sid
}).appendTo('.mylist')
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="num">Num</div>
<div class="mylist">
<div class="item" data-sid="0.98">
<p>0.98</p>
</div>
<div class="item" data-sid="4.29">
<p>4.29</p>
</div>
<div class="item" data-sid="0.98">
<p>0.98</p>
</div>
<div class="item" data-sid="23.59">
<p>23.59</p>
</div>
</div>
Upvotes: 1
Views: 37
Reputation: 10627
Should be
return +a.dataset.sid - +b.dataset.sid
because $('.mylist > div')
is an Array of DOM Elements and and Element.dataset.sid
is a String.
Upvotes: 0
Reputation: 31920
Convert your values to number using Number() like
return Number(a.dataset.sid) < Number(b.dataset.sid)
$('#num').on('click', function() {
var s = $(this).data('sort');
if (s === 0) {
$(this).data('sort', 1);
$('.mylist > div').sort(function(a, b) {
return Number(a.dataset.sid) < Number(b.dataset.sid)
}).appendTo('.mylist')
} else {
$(this).data('sort', 0);
$('.mylist > div').sort(function(a, b) {
return Number(a.dataset.sid) > Number(b.dataset.sid)
}).appendTo('.mylist')
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="num">Num</div>
<div class="mylist">
<div class="item" data-sid="0.98">
<p>0.98</p>
</div>
<div class="item" data-sid="4.29">
<p>4.29</p>
</div>
<div class="item" data-sid="0.98">
<p>0.98</p>
</div>
<div class="item" data-sid="23.59">
<p>23.59</p>
</div>
</div>
Upvotes: 2