document.getElementById
、$("#id")
atau mana-mana kaedah DOM/pemilih jQuery yang lain?
Contoh soalan termasuk:
.val()
、>.html()、.text()
) 返回 undefined
null
mengakibatkan ralat berikut: Uncaught TypeError: Tidak dapat menetapkan sifat nol '...'
Ralat Jenis Tidak Ditangkap: Tidak dapat menetapkan sifat pada null (menetapkan '...')
Ralat Jenis Tidak Ditangkap: Tidak dapat membaca sifat '...' nol
Ralat Jenis Tidak Ditangkap: Tidak dapat membaca sifat nol (baca '...')
Bentuk yang paling biasa ialah:
Uncaught TypeError: Tidak boleh menetapkan sifat 'onclick' kepada null
Ralat Jenis Tidak Ditangkap: Tidak dapat membaca sifat 'addEventList ener' null
Ralat Jenis Tidak Ditangkap: Tidak dapat membaca 'gaya' sifat nol
Ringkas: Sebab elemen yang anda cari belum wujud lagi dalam dokumen.
Untuk selebihnya jawapan ini saya akan menggunakan seperti getElementById
,但這同樣適用于 getElementsByTagName
, querySelector, serta mana-mana kaedah DOM lain untuk memilih elemen.
Sebab yang mungkin
Tiga sebab mengapa unsurmungkin tidak wujud:
Elemen dengan ID yang diluluskan tidak wujud dalam dokumen. Anda hendaklah menyemak semula sama ada ID yang anda hantar kepada getElementById
sebenarnya sepadan dengan ID elemen sedia ada dalam HTML (dihasilkan) dan supaya anda tidak tersilap mengeja ID tersebut (ID adalah sensitif huruf besar/kecil!).
Jika anda menggunakan getElementById
,請確保您僅提供元素的 ID(例如 document.getElemntById("the-id “)
)。如果您使用的方法接受 CSS 選擇器(例如 querySelector
),請確保在 ID 之前包含 #
以表明您正在查找ID(例如,document.querySelector("#the-id")
)。您不能不將#
與getElementById
一起使用,并且必須將其與querySelector
一起使用和類似的。另請注意,如果 ID 中包含在 CSS 標(biāo)識符(例如 .
;包含 .
字符的 id
屬性是不好的做法,但有效),您必須使用 querySelector
(document.querySelector("#the\.id")
)) 時轉(zhuǎn)義這些內(nèi)容,但使用 getElementById
( >document.getElementById("the.id")
, pastikan anda
document.getElemntById("the-id ")
). Jika anda menggunakan kaedah yang menerima pemilih CSS (contohnya, querySelector
), pastikan anda memasukkan #
sebelum ID untuk menunjukkan bahawa anda sedang mencari ID ( contohnya, document.querySelector ("#the-id")
). Anda tidak boleh menggunakan #
dengan getElementById
, dan
querySelector
dan seumpamanya. Juga ambil perhatian bahawa jika ID mengandungi aksara yang tidak sah dalam (cth. .
; atribut id
yang mengandungi .
aksara adalah amalan buruk, tetapi sah), anda mesti menggunakan querySelector (document.querySelector("#the\.id")
)) , tetapi gunakan ( >document.getElementById("the.id")
). iframe
中(這是它自己的文檔)。當(dāng)您搜索包含 iframe
. iframe
或類似文件中),您需要查看 iframe
中的文檔,而不是父文檔,也許可以通過獲取 iframe
元素并使用其 contentDocument
Sebab kedua - ia belum ada - sangat biasa. Pelayar menghuraikan dan memproses HTML dari atas ke bawah. Ini bermakna bahawa sebarang panggilan ke elemen DOM yang berlaku sebelum elemen DOM muncul dalam HTML akan gagal.
Pertimbangkan contoh berikut:
sssccc
div
出現(xiàn)在script
之后。執(zhí)行腳本時,該元素尚不存在,并且 getElementById
將返回 null
.
jQuery
Ini juga terpakai kepada semua pemilih jQuery. Jika anda tersalah ejapemilih anda, atau anda cuba memilihnya sebelum ia benar-benar wujud, jQuery tidak akan menemuinya.
Masalah tambahan ialah apabila jQuery tidak ditemui kerana anda memuatkan skrip tanpa protokol dan menjalankannya daripada sistem fail:
sssccc
Sintaks ini digunakan untuk membenarkan skrip dimuatkan melalui HTTPS pada halaman dengan protokol https:// dan versi HTTP pada halaman dengan protokol http://
Ia mempunyai kesan sampingan yang malang apabila cuba memuatkan file://somecdn.somewhere.com...
Penyelesaian
Sebelum memanggil getElementById
(atau mana-mana kaedah DOM dalam hal itu), pastikan elemen yang anda ingin akses wujud, iaitu DOM dimuatkan.
Cuma letak JavaScript selepas elemen DOM yang sepadan untuk memastikan ini
sssccc
Dalam kes ini, anda juga boleh meletakkan kod sebelum teg badan penutup (
Elemen yang anda cuba cari tiada dalam DOM apabila skrip anda dijalankan.
Lokasi skrip yang bergantung pada DOM boleh memberi kesan yang mendalam pada kelakuannya. Pelayar menghuraikan dokumen HTML dari atas ke bawah. Elemen ditambahkan pada DOM dan skrip (biasanya) dilaksanakan apabila ia ditemui. Ini bermakna pesanan penting. Selalunya, skrip tidak dapat mencari elemen yang muncul kemudian dalam penanda kerana ia belum ditambahkan pada DOM lagi.
Pertimbangkan penanda berikut; Skrip #1 tidak dapat ditemui sssccc