我试图计算li
元素,并将addClass
计算到另一个div。
例如:
$('.box2').addClass(function(){
return 'list' + $(this).find('.box1 li').length;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
这应该是这样的
<div class="box2 list3">text</div>
但是当我检查DOM代码时,我不知道为什么
<div class="box2 list0">text</div>
我得到了这个结果。
我需要什么来修复代码?请帮忙。
您的查询在.box1 li
中查找.box2
,尽管这两个元素是兄弟姐妹。因此,您的find()
查询将始终返回0
。
为了使您的查询起作用,您的HTML
需要如下所示:
<div class="box2">text
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</div>
在不改变HTML
的结构的情况下,您可以通过直接访问.box1 li
来实现此目的:
$('.box2').addClass(function(){
return 'list' + $('.box1 li').length;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
这里$(this)
指的是box2
元素。只有$('.box1 li').length
才是你需要的
$('.box2').addClass(function() {
return 'list_' + $('.box1 li').length;
});
.list_3 {
color: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
this没有指向你正在思考的元素,它指的是调用addClass()
的DIV元素,而这个元素没有.box1 li
。因此,find()
未能提及您想要的元素。
只需使用:
$('.box1 li').length
$('.box2').addClass(function(){
console.log(this.nodeName); // DIV
return 'list' + $('.box1 li').length;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
$(this).find
将发现li
中的div
与box2
类不存在。而是使用div
类在box1
中检查这个并找到li
元素
$('.box2').addClass(function(){
return 'list' + $('.box1').find('li').length;
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
您可以通过以下方法完成此操作
$('.box2').addClass('list' + $('.box1 li').length);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>