2017-03-16 17 views
10

Tôi biết tôi không thể làm điều này với CSS nhưng tôi tự hỏi, với jQuery, nếu có thể nhắm mục tiêu mỗi lần lặp thứ n của một phần tử có một lớp cụ thể. Vì vậy, nếu tôi muốn chọn mọi phần tử .media thứ tư hoặc mỗi mục thứ ba .media.Nhắm mục tiêu mỗi lần lặp thứ n của một phần tử có lớp cụ thể

Ví dụ:

<ul> 
    <li class="element"></li> 
    <li class="element"></li> 
    <li class="element media"></li> 
    <li class="element media"></li> 
    <li class="element"></li> 
    <li class="element media"></li> 
    <li class="element"></li> 
    <li class="element media"></li> 
</ul> 

$('.layout-option--b .media').each(function() { 
    $(this).filter(function(index, element) { 
     return index % 4; 
    }).addClass("fourth"); 
}); 
+1

CSS4 được đá xung quanh ': thứ n-match()' mà đã có thể cung cấp một giải pháp css tinh khiết. Tuy nhiên, nó đã trở thành một tính năng bị loại bỏ. Nếu không, ': nth-match (4n + 4 của .media) {color: red;}' sẽ thực hiện thủ thuật. Cho đến khi nó trở thành có sẵn hoặc CSS cho phép sử dụng một lớp như một tập hợp con trên ': nth-child()' hoặc ': nnth-of-type()' javascript/jquery là cách. – mickmackusa

Trả lời

3

Có bạn có thể sử dụng filter() cho điều này và kiểm tra các yếu tố chỉ số sử dụng %. Vì i bắt đầu từ 0, bạn có thể sử dụng i + 1.

$('li.media').filter(function(i) { 
 
    return (i + 1) % 4 == 0 
 
}).css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li class="element">Li</li> 
 
    <li class="element">Li</li> 
 
    <li class="element media">Li</li> 
 
    <li class="element media">Li</li> 
 
    <li class="element">Li</li> 
 
    <li class="element media">Li</li> 
 
    <li class="element">Li</li> 
 
    <li class="element media">Li</li> 
 
</ul>

+2

Đây là cách thực hiện. – dfsq

2

Sử dụng filter() phương pháp để lọc ra dựa trên các chỉ mục.

$('ul .media').filter(function(i) { 
 
    return (i + 1) % 4 == 0; 
 
}).addClass('class')
.class { 
 
    color: red 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li class="element"></li> 
 
    <li class="element"></li> 
 
    <li class="element media"></li> 
 
    <li class="element media"></li> 
 
    <li class="element"></li> 
 
    <li class="element media"></li> 
 
    <li class="element"></li> 
 
    <li class="element media"></li> 
 
    <li class="element"></li> 
 
    <li class="element"></li> 
 
    <li class="element media"></li> 
 
    <li class="element media"></li> 
 
    <li class="element"></li> 
 
    <li class="element media"></li> 
 
    <li class="element"></li> 
 
    <li class="element media"></li> 
 
</ul>

+0

Cảm ơn bạn đã trả lời. Tôi đoán tôi không thể làm điều này bằng cách sử dụng CSS? –

1

Hãy thử điều này:

var i = 0; 
$('.media').each(function() { 
    i++; 
    if (i%4==0) { 
     $(this).addClass("fourth"); 
    } 
}); 
Các vấn đề liên quan