2011-03-08 4 views
0

Donc, je travaille sur l'enseignement de jQuery avec l'aide de quelques livres, et je suis actuellement perplexe par un problème apparemment simple. Pourquoi la valeur de $('div.foo').length évalue à 0? Un élément div existe dans la page, alors pourquoi le $('div.foo').length n'évalue-t-il pas à 1?Question booléenne

<!DOCTYPE html> 
<html> 
<head> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js" type="text/javascript"> 
     </script> 
     <script type="text/javascript"> 
      document.write($(div.foo).length); 
      </script> 
    <body> 
      <div class="foo"></div> 
    </body> 
</html> 

Répondre

0

simple: DOM est pas encore chargé.

Vous avez deux options:

  1. placer le code juste avant la balise </body> de sorte que les éléments du document ont été chargés et, par conséquent, jQuery a une visibilité de l'objet.
  2. Utilisez $(document).ready(function(){ ...code... }) (ou sténographie $(function(){ ...code... }) de sorte que le code dans les accolades EXÉCUTE seulement après que le document est chargé

Essayez ces deux sur la taille.

réordonnancement executon:

<html> 
    <head> 
    <script src="jquery.js"></script> 
    </head> 
    <body> 
    <div class="foo"> 
    <script> 
     alert($('.foo').length); 
    </script> 
    </body> 
</html> 

attente pour les DOM chargé *

<html> 
    <head> 
    <script src="jquery.js"></script> 
    <script> 
     $(document).ready(function(){ 
     alert($('.foo').length); 
     }); 
    </script> 
    </head> 
    <body> 
    <div class="foo"> 
    </body> 
</html> 
1

Il vous manque les citations

document.write($("div.foo").length); 

Edit:

Brad est un bon point. Vous devriez envelopper cet appel dans document.ready

$(document).ready(function() { 
    document.write($("div.foo").length); 
}); 
+0

Bien que vous ayez raison à propos des guillemets, le DOM n'est pas encore complètement chargé. Il ne verra toujours pas l'élément. –

+0

@Brad: Edité pour ajouter plus d'informations. Merci –

+0

@MaheshValega: De rien. ;-) –

0

vous devez déplacez ce code après que les éléments dom sont créés, en le déplaçant au bas avant le tag body. Actuellement, vous essayez d'accéder aux éléments avant même qu'ils ne soient créés dans DOM.

<script type="text/javascript"> 
     document.write($('div.foo').length); 
    </script> 

ou

Exécutez votre code après DOM est prêt à savoir tous les éléments sont créés dans DOM.

//this piece of code can be placed even before elements are created 
    $(function(){ 
    //this code here, will run after DOM is ready 
    }); 
0

DOM n'est pas chargé. Utilisez

$(document).ready(function() { 
      alert($('div.foo').length); 
    });