Reputation: 525
I am using jQuery for add three different classes in my div with same name classes. Here is my HTML:
<div class="main-class">
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
</div>
here is my jquery code
$(document).ready(function() {
var name=$(".myclass").length ;
var selector = '.main-class';
$(selector).ready(function(){
for(var s=1;s<=name;s++)
{
if(s>3)
{
for(var z=1;z<=3;z++)
{
alert(z);
}
s=s+2;
}
else
{
if(s==1)
$('.myclass').addClass('red');
if(s==2)
$('.myclass').addClass('yellow');
if(s==3)
$('.myclass').addClass('gray');
}
}
});
});
i want my output like this
<div class="main-class">
<div class="myclass red"></div>
<div class="myclass yellow"></div>
<div class="myclass gray"></div>
<div class="myclass red"></div>
<div class="myclass yellow"></div>
<div class="myclass gray"></div>
<div class="myclass red"></div>
<div class="myclass yellow"></div>
</div>
but i got this
<div class="main-class">
<div class="myclass red yellow gray"></div>
<div class="myclass red yellow gray"></div>
<div class="myclass red yellow gray"></div>
<div class="myclass red yellow gray"></div>
<div class="myclass red yellow gray"></div>
<div class="myclass red yellow gray"></div>
<div class="myclass red yellow gray"></div>
<div class="myclass red yellow gray"></div>
</div>
I am new in jQuery.
Upvotes: 1
Views: 1692
Reputation: 2324
UPDATE: the code works fine now, you need to serve colors in array then loop over each .myclass
element and set class name according to colors array
position witch reset if the .myclass
index equal to colors length to repeat.
$(document).ready(function() {
var colors = ["green", "red", "blue"];
var c = -1;
$('.main-class .myclass').each(function() {
c++;
if(c==colors.length)c=0;
$(this).addClass(colors[c]);
//to test using .css();
$(this).css({
"color": colors[c]
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main-class">
<div class="myclass">colors</div>
<div class="myclass">colors</div>
<div class="myclass">colors</div>
<div class="myclass">colors</div>
<div class="myclass">colors</div>
<div class="myclass">colors</div>
<div class="myclass">colors</div>
<div class="myclass">colors</div>
</div>
code updated test snippet
Upvotes: 1
Reputation: 76436
You can use jquery .each() to iterate the elements and %
to see the modulo with 3:
$('.myclass').each(function(index) {
if (index % 3 === 0) {
$(this).addClass("red");
} else if (index % 3 === 1) {
$(this).addClass("yellow");
} else {
$(this).addClass("green");
}
});
Your mistake was that
$('.myclass').addClass('red');
adds red
as a class
to everything having the class
of myclass
.
Upvotes: 1
Reputation: 6628
Use each()
to iterate through your elements and addClass()
as per your need.
var classArr = ['red', 'yellow', 'grey'];
var i=0;
$('.main-class').children().each(function(key, value){
if(i == 3) { i=0; }
$(value).addClass(classArr[i]);
i++;
});
var classArr = ['red', 'yellow', 'grey'];
var i=0;
$('.main-class').children().each(function(key, value){
if(i == 3) { i=0; }
$(value).addClass(classArr[i]);
i++;
});
.red
{
color: red;
}
.yellow
{
color: yellow;
}
.grey
{
color: grey;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main-class">
<div class="myclass">RED</div>
<div class="myclass">YELLOW</div>
<div class="myclass">GREY</div>
<div class="myclass">RED</div>
<div class="myclass">YELLOW</div>
<div class="myclass">GREY</div>
<div class="myclass">RED</div>
<div class="myclass">YELLOW</div>
</div>
Upvotes: 1
Reputation: 318182
You could use addClass
with a callback, and check the index
$('.myclass').addClass(function(i) {
return i % 3 === 0 ? 'red' : (i % 3 === 1 ? 'yellow' : 'gray');
});
.red {color: red}
.yellow {color: yellow}
.gray {color: gray}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main-class">
<div class="myclass">text</div>
<div class="myclass">text</div>
<div class="myclass">text</div>
<div class="myclass">text</div>
<div class="myclass">text</div>
<div class="myclass">text</div>
<div class="myclass">text</div>
<div class="myclass">text</div>
</div>
Upvotes: 3
Reputation: 19113
Try this!
By this way, you can add n number of class names to the array and the code will work.
var c = ['red', 'yellow', 'gray']
var counter = 0
$('.myclass').each(function(i, el){
$(this).addClass(c[counter])
if(counter < (c.length -1))
counter++
else
counter = 0
})
.myclass{
height: 20px
}
.red {
background: red
}
.yellow{
background: yellow
}
.gray{
background: gray;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main-class">
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
<div class="myclass"></div>
</div>
Upvotes: 1