I need to be able to sort a list of divs based on the data-price attribute of a sub element. This is my markup:
<div class="container">
<div class="terminal" data-price="195">
<h3>195</h3>
</div>
195 - I should come in 2nd.
</div>
<div class="container">
<div class="terminal" data-price="220">
<h3>220</h3>
</div>
220 - I should come in 3rd.
</div>
<div class="container">
<div class="terminal" data-price="130">
<h3>130</h3>
</div>
130 - I should come in 1st.
</div>
This is the script I have so far:
function sorter(a, b) {
return a.getAttribute('data-price') - b.getAttribute('data-price');
};
$(document).ready(function () {
var sortedDivs = $(".terminal").toArray().sort(sorter);
$.each(sortedDivs, function (index, value) {
$(".container", this).html(value);
//console.log(value);
});
});
The result should replace the existing markup. I just can't get to work. What needs to be changed?
If you want to place them in the
body
, you could do this:Living demo: http://jsfiddle.net/a2TzL/1/
the following should work:
though I recommend against doing this without a common parent. The
$(container).parent().append(container);
part could be problematic if there are other child nodes present.demo: http://jsbin.com/UHeFEYA/1/
alternatively you could do this: