I have below code which works perfectly to sort DOM.
HTML:
<ul id="list">
<li data-order="7"></li>
<li data-order="6"></li>
<li data-order="5"></li>
<li data-order="3"></li>
<li data-order="4"></li>
<li data-order="1"></li>
<li data-order="2"></li>
</ul>
<button>Sort</button>
CSS
li::before {
content: attr(data-order);
display: block;
}
Javascript with jQuery:
const sortList = function(a, b) {
return (+a.dataset.order) - (+b.dataset.order) > 0 ? 1: - 1;
};
$('button').click(() => {
$('#list li').sort(sortList).appendTo('#list');
});
Or you can check it on codepen: https://codepen.io/EdmondWang/pen/pozeyXb
I have 2 questions.
1. Why does not browser relayout DOM once sort function get called?
2. Why appendTo()
is required to make sort work? (Even there is no detach)
Thank you for the help in advance!