Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is the sort order of jQuery's $().each() guaranteed?

On one page of my site I have have a list of entries created by the user - standard HTML <ul> with <li> elements inside it.

I want to iterate through the list, but the order of elements is important.

Using jQuery $('.myList li').each(), can I guarantee that I will get the li elements in the order that they appear in the DOM?

From my tests so far, it appears that they do get iterated in the correct order, but I can't find anything that tells me it's guaranteed.

If it isn't guaranteed, what would be the next best alternative method for iterating through them in order?

like image 520
Simba Avatar asked Aug 06 '14 08:08

Simba


1 Answers

So after reading the docs and coming away still not quite certain, I ended up diving in an actually reading the jQuery source code (thanks to @RoryMcCrossan's answer for prompting me on that).

In fact (contrary to what @RoryMcCrossan said), $().each() uses either for...in or for, depending on whether the input is an object or an array.

For 'array', it suffices to be an 'array-like' object, which is the case for a jQuery object because it contains a numbered list of elements and a length property.

Therefore, a call to $().each() will use for and not for...each as it is iterating over a jQuery object. And since we're using for, we know that we can guarantee the order of iteration for $().each() will match the order of the elements it is given.

So that leads me to ask a follow-up question of whether the order of elements given by the original query is guaranteed to be the same as they appear in the DOM. If so, then I should be okay.

The answer to that can be found in the question linked in the comments by @Mritunjay, and the answer is 'yes, they are returned in the order that they appear in the DOM.

So the final answer is that yes, I can use $('.myList li').each() and iterate through the list items in the order that they appear in the DOM.

Thanks for the help and the prompts guys. Much appreciated.

like image 184
Simba Avatar answered Sep 20 '22 15:09

Simba