为同class的DIV动态设置递增z-index的问题排查
问题分析
你的脚本存在两个核心问题:
- 嵌套循环逻辑错误:在
.each()遍历每个div时额外嵌套了for循环,导致每个div的z-index被从0到8反复覆盖,最终所有div的z-index都会变成循环的最后一个值(8),完全无法实现逐个递增的效果。 - 固定循环次数不灵活:用
i<9硬编码循环次数,无法适配实际数量未知的div。
修正方案
jQuery的.each()方法本身会返回当前元素的索引值(从0开始),直接用这个索引+1就能实现z-index从1开始逐个递增的需求,无需额外嵌套循环,还能自动适配任意数量的div。
修正后的JS代码:
$(".siblingsDiv").each(function(index) { $(this).css('z-index', index + 1); });
完整可运行代码示例
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <style> .siblingsDiv { background: yellow; height: 50px; margin-bottom: 20px; /* z-index仅对定位元素生效,需补充position属性 */ position: relative; } </style> <div class="siblingsDiv">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="siblingsDiv">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="siblingsDiv">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="siblingsDiv">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="siblingsDiv">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <script> $(".siblingsDiv").each(function(index) { $(this).css('z-index', index + 1); }); </script>
补充说明:z-index仅对
position值为relative、absolute、fixed或sticky的元素生效,因此需要给.siblingsDiv添加position: relative确保样式生效。
内容的提问来源于stack exchange,提问作者abcid d
相关产品推荐
相关产品推荐

