2013-02-15 13 views
12

クラスが子の中にあるかどうかを確認したい場合はli、クラスがある場合は返り値trueまたはdefinedです。ここではHTMLjQuery - クラスが存在し、true/falseを返します

<li class="show-more"> 
<a> if found selected then add to this</a> 
<ul> 
<li><a> sub-menu</a></li> 
<li><a> sub-menu</a></li> 
<li><a class="selected"> sub-menu</a></li> 
<li><a> sub-menu</a></li> 
</ul> 
</li> 

は文句を言わないtrueまたはfalseを返す私のコードですが、それは

var active_sub_menu = $('li.show-more ul li').find('selected'); 

alert(active_sub_menu); 
if(typeof active_sub_menu == 'defined'){ 
    $('li.show-more > a').addClass('selected'); 
} 

CSSを使用することをお勧めいけないしてください、私はJavaScriptを必要とするアンカーのURLを返します

+0

'見つかった( 'selected')'そして 'selected''!を見ることができます!==''selected'' –

答えて

23

なぜ単に.hasClass()またはlengthのために行かない:

if ($("selector").length) { /*FOUND*/ } 

または

if ($("selector").hasClass("someClass")) { /*FOUND*/ } 

$('.show-more').each(function() { 
 

 
    if ($(this).find("li a.seleted").length) { 
 
    console.log('FOUND'); 
 
    $(this).children("a").addClass('selected'); // Make main anchor also selected 
 
    } else { 
 
    console.log('NOT FOUND'); 
 
    } 
 

 
});
.selected { 
 
    background: red; 
 
}
<ul> 
 
    <li class="show-more"> 
 
    <a> if found .selected then add also to this anchor</a> 
 
    <ul> 
 
     <li><a> sub-menu</a></li> 
 
     <li><a> sub-menu</a></li> 
 
     <li><a class="selected"> sub-menu</a></li> 
 
     <li><a> sub-menu</a></li> 
 
    </ul> 
 
    </li> 
 
</ul> 
 

 

 
<script src="//code.jquery.com/jquery-3.1.0.js"></script>

+0

更新された質問をチェックしてください。アンカータグがリストタグの直後にあり、それがその子の 'ul li a'で見つかった場合、選択したクラスを追加したい場所です – user007

+0

これは今働いています:-) – user007

2

lengthを使用してセレクタが要素を返すかどうかをテストします。

if($('li.show-more ul li').find('selected').length){ 
    $('li.show-more > a').addClass('selected'); 
} 
+0

それは動作しません、私は 'alert($( 'li.show-more子の中に 'selected'クラスがあります – user007

+0

更新された質問を確認してください – user007

3
if($('li.show-more ul li').hasClass('defined')) { 
    $('li.show-more > a').addClass('selected'); 
} 

私はそれはあなたがtypeofを意図したものだと仮定?

別のオプション:

var active_sub_menu = $('li.show-more ul li').find('.selected'); 
if(active_sub_menu.length) { 
    $('li.show-more > a').addClass('selected'); 
} 
+0

私は一種の推測ですここでは、コードが混乱しています。 – bfavaretto

+0

'active_sub_menu.length'も' 0'を返します?? – user007

関連する問題