2013-10-03 6 views
11

Ich habe folgende index.html:jquery nimmt Element-ID an? normales Verhalten?

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

die Konsole Ausgänge:

<div id="foo">i'm a div</div>

warum?

+0

nicht spezifisch für jQuery, aber Javascript. Das ist mir noch nie aufgefallen, gute Frage. Hier ist eine Geige, die das obige demonstriert: http://jsfiddle.net/Blade0rz/rjwPA/1 – CodingIntrigue

+2

Es findet 'window.foo', was das Element nach ID ist. – Archer

+0

Dies ist zufällig eine gute Demonstration, warum 'ID's im DOM eindeutig sein müssen und wie sonst das Verhalten undefiniert wäre. – David

Antwort

7

Das hat nichts mit jQuery zu tun.

Dies liegt daran, dass benannte Elemente (Elemente mit einem ID oder name Attribut) Eigenschaften des Fensterobjekts werden.

console.log(foo) ist identisch mit console.log(window.foo);

Da Ihr div ist ein benanntes Element (id="foo") wird hinzugefügt window.

Named access on window

+0

Nicht in jedem Browser und es ist nicht Teil der Spezifikation. – plalx

0

JQuery nicht davon ausgehen, dass, sondern JavaScript tut. Ihr foo ist nicht in Anführungszeichen gesetzt, daher muss es entweder ein Bezeichner oder nicht definiert sein. Das Element mit der ID foo befindet sich zufällig im Bereich Ihres Skripts, daher wird das von ihm identifizierte Element protokolliert.

Wenn Sie es in bar umbenannt haben, dann können Sie auf bar verweisen, da es eine ID der obersten Ebene wäre.

Beachten Sie, dass solche Verwendung verpönt ist, weil es unklar ist, was Sie im Code tun, ohne auf den HTML-Code zu verweisen. Die Verwendung von document.getElementById(...) oder einer Variante davon wird im Allgemeinen bevorzugt, da klar ist, was Sie tun.

2

Es ist kein jQuery-Verhalten, es ist (ursprünglich) ein Internet Explorer-Verhalten. Der IE hat immer globale Variablen für jedes DOM-Element mit einem id-Attribut erstellt. Die Variable ist nach dem id benannt und verweist auf das DOM-Element. In letzter Zeit haben andere Browser dem Beispiel gefolgt.

Verwandte Themen