Javascript .find()与循环、each()和此关键字的关系-.find()应仅为2时返回4

Javascript .find()与循环、each()和此关键字的关系-.find()应仅为2时返回4,javascript,jquery,html,Javascript,Jquery,Html,我需要检查具有class.sub菜单的内部是否存在,如果存在,则将类添加到 以上是我的参考答案 我正在尝试循环遍历每个列表并检查。查找我不了解如何使用。在循环或每个函数中查找,以及如何将其与this关键字关联 我也试过了。孩子们,但它表明孩子们不是一个函数 请参见下面的第一个示例 $functione{ var getMenuItems=$.item; 对于变量i=0;i0{ 找到console.log子菜单 } }; }; 几个问题: 在传递给$的回调中,这是文档DOM对象。另一方面,fin

我需要检查具有class.sub菜单的内部是否存在,如果存在,则将类添加到

以上是我的参考答案

我正在尝试循环遍历每个列表并检查。查找我不了解如何使用。在循环或每个函数中查找,以及如何将其与this关键字关联

我也试过了。孩子们,但它表明孩子们不是一个函数

请参见下面的第一个示例

$functione{ var getMenuItems=$.item; 对于变量i=0;i您可以使用jQuery,这样就可以使用每个方法来实现所需的功能。请参阅下面的代码段:

$functione{ var getMenuItems=$.item; getMenuItems.eachfunction索引{ 如果$this.findul.sub-menu.length>0{ 找到console.log子菜单 } }; }; 几个问题:

在传递给$的回调中,这是文档DOM对象。另一方面,find是一个jQuery方法,而不是DOM方法,因此可以解释第一次尝试时出现的错误。请注意,一般情况下,在jQuery回调中应该使用$this,但也有一些例外情况,允许您调用.find之类的方法

如果find返回匹配项,则与零进行比较不是测试find是否返回匹配项的正确方法。find返回一个类似数组的jQuery对象,因此您应该执行以下操作:

if ($(this).find("ul.sub-menu").length !== 0)
尽管$this现在返回一个jQuery对象,但它在for循环的每次迭代中都是同一个对象,因此您得到4个输出,在每种情况下,tested.length值实际上是2。实际上,您希望它引用getMenuItems中的元素。为此,请使用传递给getMenuItems.each的回调。在这里,它将引用一个item元素。因此,上述if条件将变得正确:

getMenuItems.each(function () {
    if ($(this).find("ul.sub-menu").length !== 0) {
        console.log("sub-menu found");
    }
}); 
但我建议不要使用find,而是使用更智能的选择器:

$function{ $.item>ul.sub-menu.eachfunction{ 找到console.logsub菜单; }; }; A.1分段 分C.1
这不是你想象的那样。它记录了4次,因为有4件事情你正在循环。你实际上也不需要在这里做任何循环。只要选择您的目标元素并执行操作,循环就会隐式发生。您的第一次尝试是指$this吗?如果是这样,您可能是指$this.findul.sub-menu.length!==0想知道这是什么。。。。将其记录到控制台…控制台。日志此版本不相关。。。自从jQuery开始以来,每一个都是相同的