Apa yang setara dengan non-jQuery $(document).ready()
?
javascript
jquery
TIMEX
sumber
sumber
$(document).ready()
tanpa menggunakan pustaka apa pun, coba lihat ini: stackoverflow.com/questions/1795089/…$(document).ready()
- books.google.com/… . Ini juga menggunakanaddEvent
abstraksi acara mengikat yang ditulis oleh Dean Edwards, kode yang juga ada dalam buku :)Jawaban:
Yang menyenangkan tentang itu
$(document).ready()
adalah api sebelumnyawindow.onload
. Fungsi memuat menunggu hingga semuanya dimuat, termasuk aset eksternal dan gambar.$(document).ready
Namun, kebakaran ketika pohon DOM selesai dan dapat dimanipulasi. Jika Anda ingin mencapai DOM siap, tanpa jQuery, Anda dapat memeriksa ke perpustakaan ini. Seseorang mengekstraksiready
bagian dari jQuery. Ini bagus dan kecil dan Anda mungkin menemukan itu berguna:sudah ada di Google Code
sumber
Ini berfungsi dengan baik, dari ECMA
Tidak
window.onload
sama dengan JQuery$(document).ready
karena$(document).ready
hanya menunggu ke pohon DOM sambilwindow.onload
memeriksa semua elemen termasuk aset dan gambar eksternal.EDIT : Menambahkan IE8 dan yang lebih lama setara, berkat pengamatan Jan Derk . Anda dapat membaca sumber kode ini di MDN di tautan ini :
Ada opsi lain selain
"interactive"
. Lihat tautan MDN untuk detailnya.sumber
document.addEventListener("DOMContentLoaded",function(){console.log(123)})
coba sekarangSuatu hal kecil yang saya kumpulkan
domready.js
Bagaimana cara menggunakannya
Anda juga dapat mengubah konteks di mana panggilan balik berjalan dengan memberikan argumen kedua
sumber
Sekarang tahun 2018 inilah metode cepat dan sederhana.
Ini akan menambah pendengar acara, tetapi jika sudah dipecat kami akan memeriksa bahwa dom dalam keadaan siap atau sudah selesai. Ini dapat diaktifkan sebelum atau setelah sub-sumber daya selesai memuat (gambar, stylesheet, bingkai, dll).
Bacaan tambahan
Memperbarui
Berikut beberapa pembantu utilitas cepat menggunakan ES6 Impor & Ekspor standar yang saya tulis yang menyertakan TypeScript juga. Mungkin saya bisa menyiasati untuk membuat ini perpustakaan cepat yang dapat diinstal ke proyek sebagai ketergantungan.
JavaScript
TypeScript
Janji
sumber
Menurut http://youmightnotneedjquery.com/#ready pengganti yang bagus yang masih berfungsi dengan IE8 adalah
perbaikan : Secara pribadi saya juga akan memeriksa apakah jenis
fn
fungsi. Dan sebagai @elliottregan disarankan hapus pendengar acara setelah digunakan.Alasan saya menjawab pertanyaan ini terlambat adalah karena saya mencari jawaban ini tetapi tidak dapat menemukannya di sini. Dan saya pikir ini adalah solusi terbaik.
sumber
Ada pengganti berbasis standar, DOMContentLoaded yang didukung oleh lebih dari 90% browser, tetapi bukan IE8 (Jadi, di bawah ini, gunakan kode oleh JQuery untuk dukungan browser) :
Fungsi asli jQuery jauh lebih rumit dari sekedar window.onload, seperti yang digambarkan di bawah ini.
sumber
DOMContentLoaded
danload
menggunakan acaraaddEventListener
, dan pertama yang api menghapus kedua pendengar, sehingga tidak memecat dua kali.Dalam JavaScript vanilla biasa, tanpa perpustakaan? Itu kesalahan.
$
hanyalah sebuah pengidentifikasi, dan tidak terdefinisi kecuali Anda mendefinisikannya.jQuery mendefinisikan
$
sebagai "objek segalanya" miliknya sendiri (juga dikenal sebagaijQuery
Anda dapat menggunakannya tanpa bertentangan dengan pustaka lain). Jika Anda tidak menggunakan jQuery (atau perpustakaan lain yang mendefinisikannya), maka$
tidak akan ditentukan.Atau apakah Anda bertanya apa yang setara dalam JavaScript biasa? Dalam hal ini, Anda mungkin ingin
window.onload
, yang tidak persis setara, tetapi merupakan cara tercepat dan termudah untuk mendekati efek yang sama dalam JavaScript vanilla.sumber
Cara termudah di browser terbaru adalah menggunakan GlobalEventHandlers yang sesuai , diDOMContentLoaded , onload , onloadeddata (...)
Acara DOMContentLoaded dipecat ketika dokumen HTML awal telah dimuat dan diurai sepenuhnya, tanpa menunggu stylesheet, gambar, dan subframe selesai dimuat. Event load yang sangat berbeda harus digunakan hanya untuk mendeteksi halaman yang dimuat penuh. Ini adalah kesalahan yang sangat populer untuk menggunakan load di mana DOMContentLoaded akan jauh lebih tepat, jadi berhati-hatilah.
https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
Fungsi yang digunakan adalah IIFE, sangat berguna dalam kasus ini, karena memicu dirinya sendiri ketika siap:
https://en.wikipedia.org/wiki/Immediately-invoked_function_expression
Jelas lebih tepat untuk menempatkannya di akhir skrip apa pun.
Di ES6, kita juga bisa menuliskannya sebagai fungsi panah:
Yang terbaik adalah menggunakan elemen DOM, kita bisa menunggu variabel siap, yang memicu IIFE panah.
Perilaku tersebut akan sama, tetapi dengan dampak memori yang lebih sedikit.
Dalam banyak kasus, objek dokumen juga memicu ketika siap , setidaknya di browser saya. Sintaksnya sangat bagus, tetapi perlu pengujian lebih lanjut tentang kompatibilitas.
sumber
Tubuh onLoad juga bisa menjadi alternatif:
sumber