Jak wspomniano we wcześniejszej odpowiedzi, takie zachowanie jest znane jako nazwany dostęp do obiektu okna . Wartość nameatrybutu dla niektórych elementów i wartość idatrybutu dla wszystkich elementów są udostępniane jako właściwości windowobiektu globalnego . Są to tak zwane elementy nazwane. Ponieważ windowjest to obiekt globalny w przeglądarce, każdy nazwany element będzie dostępny jako zmienna globalna.
Zostało to pierwotnie dodane przez Internet Explorera i ostatecznie zostało zaimplementowane przez wszystkie inne przeglądarki po prostu w celu zapewnienia zgodności z witrynami zależnymi od tego zachowania. Co ciekawe, Gecko (silnik renderujący Firefoksa) postanowił zaimplementować to tylko w trybie dziwactw , podczas gdy inne silniki renderujące pozostawiały go w trybie standardowym.
Jednak, jak Firefox 14, Firefox obsługuje teraz o nazwie dostępu na windowobiekcie w trybie standardowym, jak również. Dlaczego to zmienili? Okazuje się, że wciąż wiele witryn korzysta z tej funkcjonalności w trybie standardowym. Microsoft wydał nawet demo marketingowe, które tak zrobiło, uniemożliwiając jego działanie w Firefoksie.
Webkit ostatnio rozważałwindow coś przeciwnego , przenosząc nazwany dostęp do obiektu tylko do trybu dziwactwa. Zdecydowali się przeciw temu z tego samego powodu, co Gecko.
Więc… szalone, jak się wydaje, takie zachowanie jest teraz technicznie bezpieczne w najnowszej wersji wszystkich głównych przeglądarek w trybie standardowym . Ale chociaż nazwany dostęp może wydawać się nieco wygodny, nie należy go używać .
Dlaczego? Wiele argumentów można streścić w tym artykule na temat tego, dlaczego zmienne globalne są złe . Mówiąc najprościej, posiadanie szeregu dodatkowych zmiennych globalnych prowadzi do większej liczby błędów. Załóżmy, że przypadkowo wpisałeś nazwę a vari zdarzyło Ci się wpisać an idwęzła DOM, SURPRISE!
Ponadto, pomimo ujednolicenia, nadal istnieje sporo rozbieżności w implementacjach nazwanego dostępu do przeglądarki.
- IE niepoprawnie udostępnia wartość
nameatrybutu dla elementów formularza (input, select itp.).
- Gecko i Webkit nieprawidłowo NIE udostępniają
<a>tagów za pomocą ich nameatrybutu.
- Gecko niepoprawnie obsługuje wiele nazwanych elementów o tej samej nazwie (zwraca odwołanie do pojedynczego węzła zamiast tablicy odniesień).
I jestem pewien, że jest więcej, jeśli spróbujesz użyć nazwanego dostępu w przypadkach na krawędzi.
Jak wspomniano w innych odpowiedziach, użyj, document.getElementByIdaby uzyskać odniesienie do węzła DOM przez jego id. Jeśli potrzebujesz uzyskać odwołanie do węzła, nameużyj jego atrybutu document.querySelectorAll.
Proszę nie rozpowszechniać tego problemu przy użyciu dostępu nazwanego w swojej witrynie. Tak wielu programistów internetowych zmarnowało czas, próbując wyśledzić to magiczne zachowanie. Naprawdę musimy podjąć działania i uzyskać silniki renderujące, aby wyłączyć dostęp nazwany w trybie standardów. W krótkim okresie spowoduje to uszkodzenie niektórych witryn, które robią złe rzeczy, ale na dłuższą metę pomoże to rozwinąć sieć.
Jeśli jesteś zainteresowany, mówię o tym bardziej szczegółowo na moim blogu - https://www.tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/ .