简体   繁体   English

将Class添加到每个第二个元素,从第一个元素开始计数

[英]Add Class to every second element, count from the first

I have a list where I want to add classes to every second element, counting from the first one. 我有一个列表,我想在每个第二个元素中添加类,从第一个元素开始计算。

Here's my list 这是我的清单

<ul class="timeline">
  <span class="topbullet"></span>
  <li></li>
  <li></li>
  <div class="clearfix"></div>
  <li></li>
  <li></li>
  <div class="clearfix"></div>
  <li></li>
  <li></li>
  <div class="clearfix"></div>
  <li></li>
  <li></li>
  <div class="clearfix"></div>
  <li></li>
  <li></li>
  <div class="clearfix"></div>
</ul>

I want to have it like this: 我希望这样:

<ul class="timeline">
  <span class="topbullet"></span>
  <li class="odd"></li>
  <li class="even"></li>
  <div class="clearfix"></div>
  <li class="odd"></li>
  <li class="even"></li>
  <div class="clearfix"></div>
  <li class="odd"></li>
  <li class="even"></li>
  <div class="clearfix"></div>
  <li class="odd"></li>
  <li class="even"></li>
  <div class="clearfix"></div>
  <li class="odd"></li>
  <li class="even"></li>
  <div class="clearfix"></div>
</ul>

Here's my jQuery Code 这是我的jQuery代码

$(".timeline li:nth-of-type(2n)").addClass('even');

It's no problem to add the 'even' classes, but how to add the 'odd' classes? 添加'偶数'类没有问题,但是如何添加'奇数'类? Which selector should I use to count from the first list element? 我应该使用哪个选择器来计算第一个列表元素?

You can use odd and even selector of jquery like this 你可以像这样使用jquery的奇数和偶数选择器

$( ".timeline li:odd" ).addClass('odd');
$( ".timeline li:even" ).addClass('even');

For your requirement you need to first odd and than even so you change this jquery like this 根据您的要求,您需要首先使用奇数,然后才能更改这个jquery

$( ".timeline li:odd" ).addClass('even');
$( ".timeline li:even" ).addClass('odd');

Or JUST this 或者只是这个

document.body.querySelectorAll(".timeline li").forEach(function(node,i){
   node.classList.add(i % 2?"even":"odd");
})

You could do this: 你可以这样做:
Iterate through the elements matching ".timeline li" and add the correct class whether its index is even or not. 迭代匹配“.timeline li”的元素并添加正确的类,无论其索引是否为偶数。

$(".timeline li").each((index, el) => $(el).addClass(index % 2 ? 'even' : 'odd'));

Just simply add prev() method to your code: 只需在代码中添加prev()方法即可:

 $(".timeline li:nth-of-type(2n)").addClass('even').prev().addClass('odd'); 
 .even{ color:red; } .odd{ color: orange; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="timeline"> <span class="topbullet">Span</span> <li>Li</li> <li>Li</li> <div class="clearfix">Div</div> <li>Li</li> <li>Li</li> <div class="clearfix">Div</div> <li>Li</li> <li>Li</li> <div class="clearfix">Div</div> <li>Li</li> <li>Li</li> <div class="clearfix">Div</div> <li>Li</li> <li>Li</li> <div class="clearfix">Div</div> </ul> 

Change: 更改:

$(".timeline li:nth-of-type(2n)").addClass('even');

to: 至:

    $(".timeline li:nth-child(even)").addClass('even');

If you just want to style elements you can target them using css 如果您只想设置元素样式,可以使用css定位它们

.timeline li:nth-of-type(2n + 1) {
    background: red;
}
.timeline li:nth-of-type(2n) {
    background: blue;
}
You can add odd/even class like the below example.

 $(document).ready(function() { $('ul.listul li:even').addClass('even'); $('ul.listul li:odd').addClass('odd'); }); 
 li.even { color: #000; } li.odd { color: red; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="listul"> <li>list1</li> <li>list2</li> <li>list3</li> <li>list4</li> <li>list5</li> <li>list6</li> </ul> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM