Seperti disebutkan dalam jawaban sebelumnya perilaku ini dikenal sebagai akses bernama pada objek jendela . Nilai name
atribut untuk beberapa elemen dan nilai id
atribut untuk semua elemen tersedia sebagai properti dari window
objek global . Ini dikenal sebagai elemen bernama. Karena window
merupakan objek global di browser, setiap elemen bernama akan dapat diakses sebagai variabel global.
Ini awalnya ditambahkan oleh Internet Explorer dan akhirnya diimplementasikan oleh semua browser lain hanya untuk kompatibilitas dengan situs yang bergantung pada perilaku ini. Menariknya, Gecko (mesin rendering Firefox) memilih untuk menerapkan ini dalam mode quirks saja, sedangkan mesin rendering lainnya membiarkannya dalam mode standar.
Namun, pada Firefox 14, Firefox sekarang mendukung akses bernama pada window
objek dalam mode standar juga. Mengapa mereka mengubah ini? Ternyata masih banyak situs yang mengandalkan fungsi ini dalam mode standar. Microsoft bahkan merilis demo pemasaran yang berfungsi, mencegah demo bekerja di Firefox.
Webkit baru-baru ini mempertimbangkan sebaliknya , mengalihkan akses bernama pada window
objek ke mode quirks saja. Mereka memutuskan untuk tidak melakukannya dengan alasan yang sama seperti Gecko.
Jadi ... gila sepertinya perilaku ini sekarang secara teknis aman untuk digunakan dalam versi terbaru dari semua browser utama dalam mode standar . Tetapi sementara akses yang diberi nama bisa terasa nyaman, seharusnya tidak digunakan .
Mengapa? Banyak alasan yang dapat dirangkum dalam artikel ini tentang mengapa variabel global buruk . Sederhananya, memiliki banyak variabel global tambahan mengarah ke lebih banyak bug. Katakanlah Anda tidak sengaja mengetik nama var
dan kebetulan mengetikkan id
simpul DOM, KEJUTAN!
Selain itu, meskipun telah distandarisasi, masih ada beberapa perbedaan dalam implementasi akses bernama browser.
- IE salah membuat nilai
name
atribut dapat diakses untuk elemen form (input, pilih, dll).
- Gecko dan Webkit salah JANGAN membuat
<a>
tag dapat diakses melalui name
atributnya.
- Gecko secara tidak benar menangani banyak elemen bernama dengan nama yang sama (ia mengembalikan referensi ke satu simpul alih-alih susunan referensi).
Dan saya yakin masih ada lagi jika Anda mencoba menggunakan akses bernama pada kasus tepi.
Seperti disebutkan dalam jawaban lain gunakan document.getElementById
untuk mendapatkan referensi ke simpul DOM dengan nya id
. Jika Anda perlu mendapatkan referensi ke sebuah simpul dengan name
menggunakan atributnya document.querySelectorAll
.
Tolong, tolong jangan menyebarkan masalah ini dengan menggunakan akses bernama di situs Anda. Begitu banyak pengembang web yang menyia-nyiakan waktu untuk melacak perilaku ajaib ini . Kita benar-benar perlu mengambil tindakan dan membuat mesin rendering untuk mematikan akses bernama dalam mode standar. Dalam jangka pendek itu akan merusak beberapa situs melakukan hal-hal buruk, tetapi dalam jangka panjang itu akan membantu memajukan web.
Jika Anda tertarik saya membicarakan hal ini lebih detail di blog saya - https://www.tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/ .