I have a blog layout I’m working on (bootstrap) and I’ve hit a snag.
I need the first two divs to be col-md-3 (NORMAL), then the following 2 divs col-md-6 (WIDE), then it needs to make the next 4 divs as col-md-3 (NORMAL), then the next 2 divs col-md-6(WIDE) and so on, so forth.
I’ve tried [this method in codepen][1], which works (code below) but is obviously not the most efficient way to do it – I’m fairly new to jQuery, so would appreciate any help you can offer!
HTML:
JavaScript
x
41
41
1
<div class="container">
2
<div class="row" id="blog">
3
<div>Normal</div>
4
<div class="">Normal</div>
5
<div class="">Wide</div>
6
<div class="">Wide</div>
7
<div class="">Normal</div>
8
<div class="">Normal</div>
9
<div class="">Normal</div>
10
<div class="">Normal</div>
11
<div class="">Wide</div>
12
<div class="">Wide</div>
13
<div class="">Normal</div>
14
<div class="">Normal</div>
15
<div class="">Normal</div>
16
<div class="">Normal</div>
17
<div class="">Wide</div>
18
<div class="">Wide</div>
19
<div class="">Normal</div>
20
<div class="">Normal</div>
21
<div class="">Normal</div>
22
<div class="">Normal</div>
23
<div class="">Wide</div>
24
<div class="">Wide</div>
25
<div class="">Normal</div>
26
<div class="">Normal</div>
27
<div class="">Normal</div>
28
<div class="">Normal</div>
29
<div class="">Wide</div>
30
<div class="">Wide</div>
31
<div class="">Normal</div>
32
<div class="">Normal</div>
33
<div class="">Normal</div>
34
<div class="">Normal</div>
35
<div class="">Wide</div>
36
<div class="">Wide</div>
37
<div class="">Normal</div>
38
<div class="">Normal</div>
39
</div>
40
</div>
41
jQuery used:
JavaScript
1
17
17
1
$("#blog div").each(function(i) {
2
var newClass = 'col-md-3 red';
3
if (i == 2) newClass = 'col-md-6 blue';
4
if (i == 3) newClass = 'col-md-6 blue';
5
if (i == 8) newClass = 'col-md-6 blue';
6
if (i == 9) newClass = 'col-md-6 blue';
7
if (i == 14) newClass = 'col-md-6 blue';
8
if (i == 15) newClass = 'col-md-6 blue';
9
if (i == 20) newClass = 'col-md-6 blue';
10
if (i == 21) newClass = 'col-md-6 blue';
11
if (i == 26) newClass = 'col-md-6 blue';
12
if (i == 27) newClass = 'col-md-6 blue';
13
if (i == 32) newClass = 'col-md-6 blue';
14
if (i == 33) newClass = 'col-md-6 blue';
15
$(this).addClass(newClass);
16
});
17
Advertisement
Answer
You can do it using .not()
and .filter()
JavaScript
1
5
1
$('#blog div').addClass('col-md-3 red') // add red class to all the divs
2
.not(':lt(2)') // exclude the first two Normal elements
3
.filter(function(i){ // filter to get the Wide elements
4
return (i % 6 == 0) || ( (i % 6) - 1 == 0) // filter every 6 element and the element next of it
5
}).addClass('col-md-6 blue'); // add the class to the Wide elements
JavaScript
1
6
1
.red{
2
background : red;
3
}
4
.blue{
5
background : blue;
6
}
JavaScript
1
41
41
1
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
2
<div class="container">
3
<div class="row" id="blog">
4
<div>Normal</div>
5
<div class="">Normal</div>
6
<div class="">Wide</div>
7
<div class="">Wide</div>
8
<div class="">Normal</div>
9
<div class="">Normal</div>
10
<div class="">Normal</div>
11
<div class="">Normal</div>
12
<div class="">Wide</div>
13
<div class="">Wide</div>
14
<div class="">Normal</div>
15
<div class="">Normal</div>
16
<div class="">Normal</div>
17
<div class="">Normal</div>
18
<div class="">Wide</div>
19
<div class="">Wide</div>
20
<div class="">Normal</div>
21
<div class="">Normal</div>
22
<div class="">Normal</div>
23
<div class="">Normal</div>
24
<div class="">Wide</div>
25
<div class="">Wide</div>
26
<div class="">Normal</div>
27
<div class="">Normal</div>
28
<div class="">Normal</div>
29
<div class="">Normal</div>
30
<div class="">Wide</div>
31
<div class="">Wide</div>
32
<div class="">Normal</div>
33
<div class="">Normal</div>
34
<div class="">Normal</div>
35
<div class="">Normal</div>
36
<div class="">Wide</div>
37
<div class="">Wide</div>
38
<div class="">Normal</div>
39
<div class="">Normal</div>
40
</div>
41
</div>