[英]How come this JQuery loop doesn't change CSS with elements less than 4
为什么这个脚本不循环遍历每个 ul.products 元素并计算 li.product 元素,然后将其更改为 css(背景为黄色)。
当我将 < 更改为 > 时,所有元素的背景颜色都会更改。 到目前为止,我知道问题在于这个脚本检查每个父元素 ul.products 但能够计算 li.product。
$(document).ready(function() { $('ul.products').each(function() { if ($('li.product').length < 4) { $("li.product").css("background-color", "yellow"); } }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <ul class="products"> <li class="product">Test</li> <li class="product">Test</li> <li class="product">Test</li> <li class="product">Test</li> <li class="product">Test</li> </ul> <ul class="products"> <li class="product">Test</li> <li class="product">Test</li> <li class="product">Test</li> </ul>
问题是因为您的代码查看 DOM 中的所有.product
元素,而不是在each()
循环中的each()
ul
中的特定元素。
要纠正此问题,您可以使用$(this)
来引用当前ul
,然后检索其子li
元素:
jQuery($ => { $('ul.products').each(function() { let $li = $(this).children('.product'); if ($li.length < 4) { $li.css("background-color", "yellow"); } }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <ul class="products"> <li class="product">Test</li> <li class="product">Test</li> <li class="product">Test</li> <li class="product">Test</li> <li class="product">Test</li> </ul> <ul class="products"> <li class="product">Test</li> <li class="product">Test</li> <li class="product">Test</li> </ul>
顺便说一句,请注意 jQuery 1.9.1 非常过时,实际上已经超过 8 年了。 在撰写此答案时,最新版本是 3.6.0。 我建议更新到那个。
您的代码应该可以正常工作。 尝试将 jquery 包含到您的 jsfiddle 中(在提供的链接中,您仅使用纯 js)。 您可以通过按下按钮“JavaScript + No-Library (pure JS)”来实现
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.