[英]How to target every first two or three elements alternatively in javascript loop
我只能针对背景颜色发生变化的前 2 个元素。 就像,前 2 个元素背景为红色,接下来的 2 个元素保持原样。 以及第 4 和第 5 个元素的背景红色..等等。 我想交替定位每 2 个元素。 我如何动态更改变量值,这每次都很容易,例如 if var count = 2; 每前 2 个元素红色...如果 count = 4; 每前 4 个元素变为红色,接下来的 4 个元素变为灰色....实际上,我想对元素使用具有动态值的样式,例如element[i].clientWidth
等。 我只是在这个例子中使用了背景颜色,这样我以后可以根据我的样式更改它,如果它工作的话。
<style>
ul li {
list-style-type: none;
display: inline-block;
padding: 10px;
}
<style>
<ul id="pix" class="select">
<li class="">one</li>
<li class="">two</li>
<li class="">three</li>
<li class="">four</li>
<li class="">five</li>
<li class="">six</li>
<li class="">seven</li>
<li class="">eight</li>
<li class="">nine</li>
<li class="">ten</li>
</ul>
<script>
var pix = document.getElementById("pix");
var piximgs = pix.children;
var i;
for (i = 0; i < piximgs.length; i++) {
piximgs[i].style.background = "gray";
// if (i && (i % 2 == 0)) {
piximgs[i % 2].style.background = "red";
// }
}
</script>
这是一个带有变量count
的修改解决方案:
<style> ul li { list-style-type: none; display: inline-block; padding: 20px; background-color: gray; } </style> <ul id="pix" class="select"> <li>one</li> <li>two</li> <li>three</li> <li>four</li> <li>five</li> <li>six</li> <li>seven</li> <li>eight</li> <li>nine</li> <li>ten</li> </ul> <script> var count = 3; Array.from(document.querySelectorAll("#pix li")).forEach((li,i)=> li.style.backgroundColor=Math.floor(i/count)%2?"red":"gray"); </script>
你可以有一个标志 - next
- 你可以在 mod 分区匹配时切换它,这样你就可以跟踪下一个元素也应该是红色的。
<style> ul li { list-style-type: none; display: inline-block; padding: 20px; background-color: gray; } </style> <ul id="pix" class="select"> <li>one</li> <li>two</li> <li>three</li> <li>four</li> <li>five</li> <li>six</li> <li>seven</li> <li>eight</li> <li>nine</li> <li>ten</li> </ul> <script> var pix = document.getElementById("pix"); var piximgs = pix.children; var i; var next = false; for (i = 0; i < piximgs.length; i++) { if(next) { piximgs[i].style.background = "red"; next = false; } if (i % 4 == 0) { piximgs[i].style.background = "red"; next = true; } } </script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.