2010-02-25 3 views
1

je me suis vite fait cette fonction pour un im script en utilisant:jQuery - IE retour de 0 enfants

$.fn.liCount = function(){ 
    var i=0; 
    $(this).children().each(function(){ 
     i++; 
    }); 
    return Number(i); 
} 
problème est

retourne IE 0, quelqu'un sait pourquoi?

alert($("ul").liCount()); 

modifier:

<div id="prev-quotes"> 
    <ul id="quote-list"> 
     <li id="quote_content_wrapper" > 
      <ul> 
       <li class="quote_li"> 
        <span class="service_quote"><a href="#">Web Design Services</a></span> 
        <br> 
        <span class="cost_quote"><strong>£192</strong> - <a id="7" href="#">delete</a> | <a id="7" href="#">view</a></span> 
       </li> 
       <li class="quote_li"> 
        <span class="service_quote"><a href="#">Web Design Services</a></span> 
        <br> 
        <span class="cost_quote"><strong>£192</strong> - <a id="7" href="#">delete</a> | <a id="7" href="#">view</a></span> 
       </li> 
       <li class="quote_li"> 
        <span class="service_quote"><a href="#">Web Design Services</a></span> 
        <br> 
        <span class="cost_quote"><strong>£192</strong> - <a id="7" href="#">delete</a> | <a id="7" href="#">view</a></span> 
       </li> 
      </ul> 
     </li> 
     <li> 
      <a id="first-quote" href="#">Previous Quotes</a> 
      <img height="16" width="16" id="warning" src="images/for_web/check_mark.png"> 
     </li> 
    </ul>  
</div> 

Répondre

1

Vous pouvez simplement utiliser

$("ul > li").length; 

Voir Child Selector (“parent > child”)

Si vous voulez obtenir le nombre de li intérieur ul avec id quote-list, vous pouvez utiliser

$("#quote-list > li").length; 

Si vous voulez obtenir le nombre de li avec des noms de classe quote_li, vous pouvez utiliser

$("#quote-list > li > ul > li.quote_li").length; 
+0

Merci aussi. –

+0

ne fonctionne toujours pas: element_delete.parents ('li: eq (0)'). Remove(); \t \t \t \t \t \t if ($ ("# quote-list> li> ul> li.quote_li") de longueur. == 5) { \t \t \t \t \t \t \t $ ("# quote_content_wrapper"). Css ("hauteur", "auto"); \t \t \t \t \t \t} else if ($ (longueur "# quote-list> li> ul> li.quote_li"). == 0) { \t \t \t \t \t \t \t $ ("warning #") .attr ("src", "images/for_web/warning.png"); \t \t \t \t \t \t \t} –

0

Il n'y a pas besoin d'utiliser return Number(i); lorsque vous êtes certain i est un nombre.

Vous n'avez même pas besoin d'un compteur var du tout - il y a .length dans jQuery.

Pourquoi ne pas simplement utiliser les éléments suivants à la place:

$.fn.liCount = function() { 
return $(this).children('li').length; 
}; 

Il est plus court, plus rapide, plus facile à lire, et it works in all browsers.

Cependant, il semble un peu verbeux/inutile d'écrire un «plugin» pour cela. Vous pouvez simplement utiliser quelque chose comme:

$('ul > li').length; 
+0

Renvoie toujours 0. –

+0

Pouvez-vous nous fournir le code HTML que vous utilisez? Aussi, de quelle version d'IE parlez-vous? Quelle version de jQuery utilisez-vous? –

+0

dernière version de IE et jQuery –

0

Dans IE 7 et 8 vous devez identifier la balise enfant

$.fn.liCount = function(){ 
    var i=0; 
    $(this).children("li").each(function(){ 
     i++; 
    }); 
    return Number(i); 
} 

fonctionnera. Bien sûr, cela limite l'utilisation de la méthode, sauf si vous passez dans l'élément que vous souhaitez compter comme ...

$.fn.liCount = function(elem){ 
     var i=0; 
     $(this).children(elem).each(function(){ 
      i++; 
     }); 
     return Number(i); 
    } 

puis appelez

alerte ($ (« ul »). LiCount (« li »));