2013-02-15 5 views
12

Ich möchte überprüfen, ob die Klasse innerhalb eines Kinds von li existiert und wenn die Klasse existiert, gebe true oder defined zurück.jQuery - finde eine Klasse exist und gebe true/false zurück

HTML

<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> 

hier ist mein Code, aber werden nicht wahr oder falsch zurück, zurück es die URL des Ankers

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'); 
} 

bitte nicht vorschlagen, CSS zu verwenden, ich brauche Javascript nur

+0

'finden ('ausgewählt')' und wie Sie sehen können "'ausgewählt''! =='' .selected'' –

Antwort

23

Warum nicht einfach gehen für .hasClass() oder length:

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

oder

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

Bitte überprüfen Sie die aktualisierte Frage, es gibt ein Anker-Tag direkt nach dem Listen-Tag und das ist der Ort, wo ich ausgewählte Klasse hinzufügen möchte, wenn in seinem Kind gefunden 'ul li a' – user007

+0

Dank es funktioniert jetzt :-) – user007

2

Verwenden Sie length, um zu testen, ob der Selektor Elemente

zurückgibt
+0

es funktioniert nicht, ich habe versucht 'alert ($ (' li.show-more ul li '). find (' qa-nav-main-selected '). length); 'und es gibt' 0' zurück, aber es gibt 'selected' Klasse in einem Kind – user007

+0

Bitte überprüfen Sie die aktualisierte Frage – user007

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

Ich gehe davon aus, dass das, was Sie mit typeof gedacht?

Eine weitere Option:

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

Ich bin eine Art zu erraten Hier ist dein Code verwirrend. – bfavaretto

+0

'active_sub_menu.length' gibt auch' 0' zurück ?? – user007

Verwandte Themen