Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort DOM Elements (Order) By Attribute

Tags:

jquery

I have LI elements randomly placed inside a UL and I need to sort them by the data-order attribute value. That is, after the sort operation, the DOM order of the LI elements should correspond to their data-order value.

My question is, how do I apply this sorter to an empty / append sequence to delete and create DOM elements?

function sortEventsByOrder(a,b) {

	var startA = parseInt($(a).attr('data-order'));
	var startB = parseInt($(b).attr('data-order'));	
	return startA - startB;
}

$('#eventList li').sort(sortEventsByOrder);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul id="eventList">
   <li data-order="5">Element 5</li>
   <li data-order="3">Element 3</li>
   <li data-order="6">Element 6</li>
   <li data-order="1">Element 1</li>
   <li data-order="2">Element 2</li>
   <li data-order="4">Element 4</li>
</ul>
like image 768
gene b. Avatar asked Nov 26 '25 04:11

gene b.


1 Answers

You are sorting properly, yet you are not replacing the list items in the DOM.

function sortEventsByOrder(a,b) {
	const startA = parseInt($(a).data('order'));
	const startB = parseInt($(b).data('order'));	
	return startA - startB;
}

$('#eventList').html($('#eventList li').sort(sortEventsByOrder))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul id="eventList">
   <li data-order="5">Element 5</li>
   <li data-order="3">Element 3</li>
   <li data-order="6">Element 6</li>
   <li data-order="1">Element 1</li>
   <li data-order="2">Element 2</li>
   <li data-order="4">Element 4</li>
</ul>
like image 98
connexo Avatar answered Nov 29 '25 00:11

connexo



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!