jQuery 添加 class active 到第三个动态创建的 div
jQuery add class active to third dynamically created div
我有这个 div:
<div class="mm_vert_container" style="display: block;"></div>
运行 jQuery 代码后,我在 mm_vert_container
上方动态添加 div
,我的代码如下所示:
<div class="mm_vert_container" style="display: block;">
<div>A</div>
<div>B</div>
<div>C</div>
<div>D</div>
<div>E</div>
<div>F</div>
</div>
所以我需要添加到每三分之一 div
如果存在 class 活动所以需要看起来像这样:
<div class="mm_vert_container" style="display: block;">
<div>A</div>
<div>B</div>
<div class="active">C</div>
<div>D</div>
<div>E</div>
<div>F</div>
</div>
我尝试使用 jQuery 代码将 class active 添加到第三个 div:
$(".mm_vert_container div:nth-child(2)").addClass("active");
但它不会给第三个元素添加class active。我认为问题是动态生成的 divs 然后 DOM 元素使用上面的 jQuery 代码看不到动态生成的 divs 这就是为什么不起作用?
首先请注意,使用 nth-child
选择器时索引从 1
开始,因此 'C' 元素位于索引 3
,而不是 2
。
要将 class 添加到每三个元素,请使用 nth-child(3n)
,如下所示:
$(".mm_vert_container div:nth-child(3n)").addClass("active");
.active {
color: #FFF;
background-color: #C00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mm_vert_container" style="display: block;">
<div>A</div>
<div>B</div>
<div>C</div>
<div>D</div>
<div>E</div>
<div>F</div>
</div>
另请注意,此处不需要 jQuery,因为 nth-child()
选择器直接在 CSS 中得到很好的支持:
.mm_vert_container div:nth-child(3n) {
color: #FFF;
background-color: #C00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mm_vert_container" style="display: block;">
<div>A</div>
<div>B</div>
<div>C</div>
<div>D</div>
<div>E</div>
<div>F</div>
</div>
后者将是更好的解决方案,因为它将 JS 逻辑与 UI 分离,并且还意味着您稍后在页面生命周期将自动赋予样式; IE。您不需要再次手动更新 DOM。
使用 find()
method and :nth-child() Selector
查找 .mm_vert_container
的子元素,以选择作为其父元素的第 n 个子元素的所有元素..
$(".mm_vert_container div:nth-child(3n)").addClass("active");
而不是 $(".mm_vert_container div:nth-child(2)").addClass("active");
代码应该是 $(".mm_vert_container div:nth-child(3)").addClass("active");
来影响第三个 child,因为 nth-child(2)
意味着第二个 child.
如果你想每隔三分之一 child 效果一次,最好使用 $(".mm_vert_container div:nth-child(3n)").addClass("active");
,这样你就不需要循环了。您只能通过 CSS.
来执行此操作
希望对您有所帮助。
谢谢。
我有这个 div:
<div class="mm_vert_container" style="display: block;"></div>
运行 jQuery 代码后,我在 mm_vert_container
上方动态添加 div
,我的代码如下所示:
<div class="mm_vert_container" style="display: block;">
<div>A</div>
<div>B</div>
<div>C</div>
<div>D</div>
<div>E</div>
<div>F</div>
</div>
所以我需要添加到每三分之一 div
如果存在 class 活动所以需要看起来像这样:
<div class="mm_vert_container" style="display: block;">
<div>A</div>
<div>B</div>
<div class="active">C</div>
<div>D</div>
<div>E</div>
<div>F</div>
</div>
我尝试使用 jQuery 代码将 class active 添加到第三个 div:
$(".mm_vert_container div:nth-child(2)").addClass("active");
但它不会给第三个元素添加class active。我认为问题是动态生成的 divs 然后 DOM 元素使用上面的 jQuery 代码看不到动态生成的 divs 这就是为什么不起作用?
首先请注意,使用 nth-child
选择器时索引从 1
开始,因此 'C' 元素位于索引 3
,而不是 2
。
要将 class 添加到每三个元素,请使用 nth-child(3n)
,如下所示:
$(".mm_vert_container div:nth-child(3n)").addClass("active");
.active {
color: #FFF;
background-color: #C00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mm_vert_container" style="display: block;">
<div>A</div>
<div>B</div>
<div>C</div>
<div>D</div>
<div>E</div>
<div>F</div>
</div>
另请注意,此处不需要 jQuery,因为 nth-child()
选择器直接在 CSS 中得到很好的支持:
.mm_vert_container div:nth-child(3n) {
color: #FFF;
background-color: #C00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="mm_vert_container" style="display: block;">
<div>A</div>
<div>B</div>
<div>C</div>
<div>D</div>
<div>E</div>
<div>F</div>
</div>
后者将是更好的解决方案,因为它将 JS 逻辑与 UI 分离,并且还意味着您稍后在页面生命周期将自动赋予样式; IE。您不需要再次手动更新 DOM。
使用 find()
method and :nth-child() Selector
查找 .mm_vert_container
的子元素,以选择作为其父元素的第 n 个子元素的所有元素..
$(".mm_vert_container div:nth-child(3n)").addClass("active");
而不是 $(".mm_vert_container div:nth-child(2)").addClass("active");
代码应该是 $(".mm_vert_container div:nth-child(3)").addClass("active");
来影响第三个 child,因为 nth-child(2)
意味着第二个 child.
如果你想每隔三分之一 child 效果一次,最好使用 $(".mm_vert_container div:nth-child(3n)").addClass("active");
,这样你就不需要循环了。您只能通过 CSS.
希望对您有所帮助。
谢谢。