11
votes

JQuery assume l'identifiant d'élément? comportement normal?

J'ai l'index.html suivant:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript">
        </script>
        <script type="text/javascript">
            jQuery(document).ready(function($) {
                console.log(foo); // jQuery assumes foo is an id?
            });
        </script>
    </head>
    <body>
        <div id="foo">i'm a div</div>
    </body>
</html>


3 commentaires

Pas spécifique à JQuery, mais JavaScript. Je n'ai jamais remarqué cela avant la bonne question. Voici un violon qui démontre ce qui précède: jsfiddle.net/blade0rz/rjwpa/1


C'est la recherche window.foo , qui est l'élément par ID.


Ceci est une bonne démonstration de la raison pour laquelle id doit être unique dans le DOM et comment le comportement serait indéfini.


3 Réponses :


7
votes

Cela n'a rien à voir avec JQuery.

Ceci est parce que les éléments nommés (éléments avec un ID ou nom attribut) deviennent propriétés de l'objet de la fenêtre.

console.log (foo) est identique à console.log (fenêtre.foo);

puisque votre div est un élément nommé ( id = "foo" ), il est ajouté à fenêtre . .

Accès nommé sur la fenêtre


1 commentaires

Pas dans chaque navigateur cependant et ce n'est pas une partie de la spécification.



0
votes

jQuery ne suppose pas que, mais plutôt JavaScript. Votre FOO n'est pas noté, il doit donc être un identifiant ou undefined. L'élément avec ID FOO se trouve être dans la portée de votre script, l'élément identifié par elle est enregistré.

Si vous l'avez renommé bar , vous seriez en mesure de référencer bar car il s'agirait d'un identifiant de niveau supérieur.

Notez que une telle utilisation est fronçée car il n'est pas clair ce que vous faites dans le code sans référencer le HTML. En utilisant document.getelementByID (...) ou une variante de celle-ci est généralement préférable car il est clair ce que vous faites.


0 commentaires

2
votes

Ce n'est pas un comportement de jQuery, c'est (à l'origine) un comportement d'Internet explorateur. IE a toujours créé des variables globales pour chaque élément DOM comportant un attribut ID . La variable est nommée d'après le ID et références de l'élément DOM. Dernièrement, d'autres navigateurs ont suivi la poursuite.


0 commentaires