【发布时间】:2018-11-29 03:18:23
【问题描述】:
我需要检查 <li> 中是否存在具有 .sub-menu 类的 <ul>,如果存在,请将类添加到 <a> 上方 .sub-menu 标记内的锚标记中
Using jQuery to see if a div has a child with a certain class
How to detect if any child elements within a parent element has a certain class?
以上是我的参考答案。
我正在尝试遍历每个列表并检查.find() 我不明白如何在循环中使用.find() 或each() 函数以及如何将其与this 关键字联系起来。
我也尝试了.children(),但它抛出 children() 不是函数
请参见下面的第一个示例。
$(function(e) {
var getMenuItems = $(".item");
for (var i = 0; i < getMenuItems.length; i++) {
if (this.find("ul.sub-menu") !== 0) {
console.log("sub-menu found")
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li class="item">
<a href="#"></a>
<ul class="sub-menu">
<li></li>
</ul>
</li>
<li class="item">
<a href="#"></a>
</li>
<li class="item">
<a href="#"></a>
<ul class="sub-menu">
<li></li>
</ul>
</li>
<li class="item">
<a href="#"></a>
</li>
</ul>
它抛出this.find is not a function - 为什么?不能在.find() 中使用this 吗? this 不是指我认为的吗?
我不明白。
我也试过这个:
$(function(e) {
var getMenuItems = $(".item");
for (var i = 0; i < getMenuItems.length; i++) {
if (getMenuItems.find("ul.sub-menu") !== 0) {
console.log("sub-menu found")
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li class="item">
<a href="#"></a>
<ul class="sub-menu">
<li></li>
</ul>
</li>
<li class="item">
<a href="#"></a>
</li>
<li class="item">
<a href="#"></a>
<ul class="sub-menu">
<li></li>
</ul>
</li>
<li class="item">
<a href="#"></a>
</li>
</ul>
错误消失了,但是当我期望它是 2 时它记录了 4 次。这是因为我认为它只是循环了 4 次?为什么.find() 在这个例子中不起作用?在这些示例中,this 到底指的是什么?我的理解是,如果您在循环中使用this,它指的是它循环通过的每个元素。但我想情况并非如此。
此代码 sn-p 需要更改什么,以便我可以使用 .sub-menu 访问 2 个部分并相应地修改 DOM?
【问题讨论】:
-
this不是你想象的那样。 -
它记录了 4 次,因为你循环了 4 件事。
-
你实际上也不需要在这里做任何循环。只需选择您的目标元素并开始工作,循环就会隐式发生。
-
第一次尝试时您的意思是
$(this)吗?如果是这样,您的意思可能是$(this).find("ul.sub-menu").length !== 0 -
想知道
this是什么....记录到控制台...console.log(this)
标签: javascript jquery html