2017-05-08 4 views
2

ない場合には、私は、それらが可視B項目が続く全AアイテムにマッチするセレクタquerySelectorまたは機能をするノードアイテム用のJavaScriptセレクタ次可視

A 
B 
B 
A 
A 
A 
B 
B 

のリストを持っていると言います。

jQueryの$(".a ~ .b:visible")は、.bセレクタのリストを返します。.aが必要です。そしてそれはjQueryであり、純粋なjavascriptではありません。

答えて

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

AAH、私が使用して考えていなかった: – 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ではなく、そのようなペアが2つ以上ある場合を考えてみましょう。 '$()'はjQueryオブジェクトのリストを返し、 '.prev'は失敗します – Rajesh