问题描述

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

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

最佳解决办法

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

次佳解决办法

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

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

这更符合本机 JavaScript 迭代器。

… 虽然<li> 不能是另一个<li> 的直接孩子

第三种解决办法

看看 jQuery 函数的基本”prototypes”(或者方法,如果你愿意的话):

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

第四种办法

but how can I target each of these li items? Doesn’t $(this) target the original loop?

不。

this 来自您直接使用的功能。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。