在jQuery中针对每个循环嵌套内置$(this)

时间:2013-05-02 19:29:18

标签: javascript jquery html

我试图弄清楚,在迭代一些列表项时,如何定位每个" $(this)"嵌套的foreach循环中的等价物。这是我的问题的一个例子:

$('li').each(function(){
        // I believe $(this) would target each li item...
    $(this).children("li").each(function(){
        // ... but how can I target each of these li items? Doesn't $(this) target the original loop?
    });
});

5 个答案:

答案 0 :(得分:74)

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

答案 1 :(得分:28)

不要使用this!使用功能参数!

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

这更符合本机JavaScript迭代器。

...虽然<li>不能成为另一个<li>

的直接孩子

答案 2 :(得分:10)

查看jQuery函数(或方法,如果你愿意)的基本“原型”:

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

回调是将在jQ对象的上下文中调用的函数。显然,上下文为this。简单地说就是:

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

同样适用于您的情况,无论是否嵌套循环:

$('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
    });
});

答案 3 :(得分:3)

  

但我如何定位这些礼品? $(this)不针对原始循环吗?

不。

this来自您直接的功能。

答案 4 :(得分:2)

不,this指的是每个子<li>项。尝试一下。

大多数(如果不是全部)与DOM交互的jQuery回调将this设置为您正在使用的DOM元素。

你也可以写:

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