我正在使用jQuery选择器来返回对象。
例如var target = $('.target');
将返回6个对象。
对象没有相同的父对象。
我想给每个对象类如下:
target[0].addClass('top');
target[1].addClass('middle');
target[2].addClass('low');
target[3].addClass('top');
target[4].addClass('middle');
target[5].addClass('low');
依此类推......我以为我可以使用一些模数。我知道以下是错误的。
target.each(function(index){
index += 1;
if (index % 3 === 0) {
$(this).addClass('low');
} else if(index % 2 === 0) {
$(this).addClass('middle');
} else {
$(this).addClass('top');
}
}
我有一种轻松的方式,我在看?
答案 0 :(得分:7)
这应该做你想要的事情
var classes = ['top', 'middle', 'low'];
target.each(function(index){
$(this).addClass( classes[index % 3] );
}
工作演示
var classes = ['top', 'middle', 'low'];
$(function() {
var target = $('.target');
target.each(function(index) {
$(this).addClass(classes[index % 3]);
});
});
.top {
color: red;
}
.middle {
color: green;
}
.low {
color: cyan;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="target">1</div>
<div class="target">2</div>
<div class="target">3</div>
<div class="target">4</div>
<div class="target">5</div>
<div class="target">6</div>
答案 1 :(得分:0)
您需要使用模数运算符,但首先要了解它的工作原理:
a%b当且仅当b除以a-c时返回c,或者换言之,c是超过b的欧几里德除法的其余部分。
现在这将有效:
target.each(function(index){
if (index % 3 === 0) {
$(this).addClass('low');
} else if(index % 3 === 1) {
$(this).addClass('middle');
} else {
$(this).addClass('top');
}
}
答案 2 :(得分:0)
jQuery的.each()
方法会增加索引本身,因此您不需要进行增量。
var target = $('.target');
target.each(function (i, el) {
switch (i % 3) {
default:
break;
case 0:
$(this).addClass("top")
break;
case 1:
$(this).addClass("middle")
break;
case 2:
$(this).addClass("bottom")
break;
}
});
答案 3 :(得分:0)
由于这些元素不是同一个父母的孩子,你应该尝试这样的事情。
<div>Top 1</div>
<div>Middle 1</div>
<div>Low 1</div>
<div>Top 2</div>
<div>Middle 2</div>
<div>Low 2</div>
<script>
$('div:nth-child(3n+1)').addClass("top");
$('div:nth-child(3n+2)').addClass("middle");
$('div:nth-child(3n+3)').addClass("low");
</script>