2017-05-08 32 views

回答

6

您可以使用:has()+相鄰兄弟選擇器的組合。

$('.a:has(+ .b:visible)').css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="a">A</div> 
 
<div class="b">B</div> 
 
<div class="b" style="display: none;">B</div> 
 
<div class="a">A</div> 
 
<div class="b" style="display: none;">B</div> 
 
<div class="b">B</div>

或者你也可以選擇.b:visible然後prev(.a)元素。

$('.b:visible').prev('.a').css('color', 'red')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="a">A</div> 
 
<div class="b">B</div> 
 
<div class="b" style="display: none;">B</div> 
 
<div class="a">A</div> 
 
<div class="b" style="display: none;">B</div> 
 
<div class="b">B</div>

+0

啊哈,不錯,我沒想到使用:具有 – frumbert

0

你有試過的.next()方法?

var list 
$(".a")each(function(index, obj) { 
    if($(obj).next().is(":visible")) { 
     list += obj 
    } 
}) 
-1

我認爲這是做的更簡單的方法:

$('.a + .b:visible').prev() 
+0

爲什麼這個排名負,請讓我知道... – Goku

+0

不是downvoter,但考慮一個情況,你有超過1個這樣的對。不是'$()'會返回一個jQuery對象列表,'.prev'會失敗 – Rajesh