2010-05-05 16 views
9

Ciao Voglio contare LI che non ha l'UL, solo per il primo livello, ma quando conto questo mostra la dimensione 4 invece di 2, il suo conteggio anche la LI interna.Come contare Li che non ha ul?

<div class="navigation-container"> 
    <ul class="first-level"> 
     <li><a href="#">Link 1</a></li> 
     <li><a href="#">Link 2</a> 
     <ul> 
      <li><a href="#">Link2.1</a></li> 
      <li><a href="#">Link2.2</a> 
      <ul> 
       <li><a href="#">Link 2.2.1</a></li> 
      </ul> 
      </li> 
     </ul> 
     </li> 
     <li><a href="#">Link </a></li> 
    </ul> 
    </div> 

jQuery per questo.

jQuery(document).ready(function(){ 

    var nosubnav = jQuery('.first-level li:not(:has(ul))'); 
    var nosubnavsize = jQuery('.first-level li:not(:has(ul))').size(); 
    jQuery(nosubnav).css('border' , '1px solid red'); 
    alert('List item which does not have submenu '+nosubnavsize); 

}); 

link per il test link text su JSBin,

grazie

risposta

11

È possibile utilizzare il selettore di figlio > t o Scegli come target solo elementi figlio direttamente sotto il genitore.

jQuery(document).ready(function(){ 

    var nosubnav = jQuery('.first-level > li:not(:has(ul))'); 
    var nosubnavsize = jQuery('.first-level > li:not(:has(ul))').size(); 
    jQuery(nosubnav).css('border' , '1px solid red'); 
    alert('List item which does not have submenu '+nosubnavsize); 

}); 

Ciò restituirà il conteggio di 2. È inoltre possibile ottimizzare questo un po 'riutilizzando la selezione memorizzata del bersaglio Li (memorizzato in nosubnav):

jQuery(document).ready(function(){ 

    var nosubnav = jQuery('.first-level > li:not(:has(ul))'); 
    nosubnav.css('border' , '1px solid red'); 
    alert('List item which does not have submenu '+nosubnav.length); 

}); 

Questo sarà tagliato fuori il sovraccarico di interrogare il DOM una seconda volta.

9

Non sono sicuro se sto leggendo giusto, ma ..

$('ul.first-level > li:not(:first)').length 

restituisce 2 per me (see demo)

4
$('.first-level > li:not(:has(ul))').size() 
Problemi correlati