The loop starts from the beginning to the end, 0 to the max .length if > 0, so it will always go in the same order if you provide an html selector ( which would pick up elements in the order they are defined in the structure/markup ).
However if you fed an object to $.each directly, since there is no standard way or rule dictating how the ordering should be, usually it would go in the order they're defined for most interpreters I've seen, but interpreters aren't really supposed to obey this "rule".
each: function( object, callback, args ) {
var name, i = 0, length = object.length;
if ( args ) {
if ( length === undefined ) {
for ( name in object )
if ( callback.apply( object[ name ], args ) === false )
break;
} else
for ( ; i < length; )
if ( callback.apply( object[ i++ ], args ) === false )
break;
As you can see the second for loop is the one that's actually executed.