Pytanie jquery przyjmuje identyfikator elementu? normalne zachowanie? [duplikować]


To pytanie już zawiera odpowiedź:

Mam następujący plik index.html:

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

wyjścia konsoli:

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

czemu?


11
2017-10-03 12:21


pochodzenie


Nie dotyczy to jQuery, ale JavaScript. Nigdy tego nie zauważyłem, dobre pytanie. Oto skrzypce, które demonstrują powyższe: jsfiddle.net/Blade0rz/rjwPA/1 - CodingIntrigue
To znalezienie window.foo, który jest elementem według ID. - Archer
Jest to zbieg okoliczności dobre uzasadnienie ids muszą być unikalne w DOM i jak inaczej zachowanie byłoby niezdefiniowane. - David


Odpowiedzi:


To nie ma nic wspólnego z jQuery.

Dzieje się tak dlatego, że nazwane elementy (elementy o wartości ID lub name atrybut) stają się właściwościami obiektu window.

console.log(foo) jest identyczny z console.log(window.foo);

Od twojego div jest nazwanym elementem (id="foo"), jest dodawany do window.

Nazwany dostęp w oknie


7
2017-10-03 12:28



Nie w każdej przeglądarce i nie jest częścią specyfikacji. - plalx


To nie jest zachowanie jQuery, to (pierwotnie) zachowanie Internet Explorera. IE zawsze tworzy globalne zmienne dla każdego elementu DOM, który ma id atrybut. Zmienna nazywa się po id i odwołuje się do elementu DOM. Ostatnio inne przeglądarki poszły w jego ślady.


2
2017-10-03 12:30





JQuery nie zakłada tego, ale raczej robi to JavaScript. Twój foo jest niecałkowita, więc musi to być identyfikator lub niezdefiniowana. Element o identyfikatorze foo dzieje się w zasięgu twojego skryptu, więc element przez niego zidentyfikowany jest rejestrowany.

Jeśli zmieniłeś nazwę na bar, wtedy będziesz mógł się odwoływać bar ponieważ byłby to identyfikator najwyższego poziomu.

Zauważ, że takie użycie jest niezadowolone, ponieważ nie jest jasne, co robisz w kodzie bez odwoływania się do html. Za pomocą document.getElementById(...) lub jego wariant jest na ogół preferowany, ponieważ jasne jest, co robisz.


0
2017-10-03 12:30