Targeting $(this) within nested for each loops in jQuery

Solution 1:

$('li').each(function(){
    var $this = $(this);
    $this.children("li").each(function(){
        $this; // parent li
        this; // child li
    });
});

Solution 2:

Don't use this! Use function parameters!

$('li').each(function(i, li){
    $(li).children("li").each(function(ii, li2){
        $(li)...
        $(li2)...
    });
});

This is more in keeping with the native JavaScript iterators.

...though an <li> can't be the direct child of another <li>

Solution 3:

Look at the basic "prototypes" of jQuery functions (or methods, if you will):

$[jQobject].[func]([callback]);

The callback is the function that will be invoked in the context of the jQ object. The context being this, obviously. Put simply that means that:

$('#foo').click(function(){});
   /\                 /\
   || Is the context  ||
   =====================

The same applies to your case, regardless of the loops being nested or not:

$('ul').each(function()
{
    //this is ul
    var that = this;//you'll often see code like this
    $('li', this).each(function()
    {
        //this is li
        //that is parent ul
    });
});