Why doesn’t $.each() iterate through every item?

$.each(".indent", function(index){

doesn’t iterate over the elements of $('.indent') but over the ".indent" string whose length is 7 chars.

See reference


A more detailed explanation based on jQuery source code :

jQuery first checks if the first parameter, obj (here your string), has a length :

var ...
        length = obj.length,
        isObj = length === undefined || jQuery.isFunction( obj );

Your string having a length (and not being a function), isObj is false.

In this case, the following code is executed :

for ( ; i < length; ) {
    if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
        break;
    }
}

So, given the function f, the following code

$.each(".indent", f);

is equivalent to

for (var i=0; i<".indent".length; i++) {
    var letter = ".indent"[i];
    f.call(letter, i, letter);
}

(you can log the letters using var f = function(i,v){console.log(v)}; or be reminded one of the subtleties of call using var f = function(){console.log(this)};)

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)