Saya ingin menjalankan fungsi ketika beberapa div atau input ditambahkan ke html. Apakah ini mungkin?
Misalnya, input teks ditambahkan, maka fungsinya harus dipanggil.
Saya ingin menjalankan fungsi ketika beberapa div atau input ditambahkan ke html. Apakah ini mungkin?
Misalnya, input teks ditambahkan, maka fungsinya harus dipanggil.
Jawaban:
Pembaruan 2015, baru
MutationObserver
didukung oleh peramban modern:Chrome 18+, Firefox 14+, IE 11+, Safari 6+
Jika Anda perlu mendukung yang lebih lama, Anda dapat mencoba kembali ke pendekatan lain seperti yang disebutkan dalam jawaban 5 (!) Tahun di bawah ini. Ada naga. Nikmati :)
Orang lain mengganti dokumen? Karena jika Anda memiliki kontrol penuh atas perubahan, Anda hanya perlu membuat
domChanged
API Anda sendiri - dengan fungsi atau acara khusus - dan memicu / menyebutnya di mana pun Anda memodifikasi sesuatu.The DOM Level-2 memiliki Mutasi jenis acara , namun versi yang lebih tua dari IE tidak mendukung hal itu. Perhatikan bahwa peristiwa mutasi tidak lagi digunakan dalam spesifikasi Acara DOM3 dan memiliki penalti kinerja .
Anda dapat mencoba meniru acara mutasi dengan
onpropertychange
di IE (dan kembali ke pendekatan brute-force jika tidak ada yang tersedia).Untuk domChange penuh, interval bisa menjadi over-kill. Bayangkan Anda perlu menyimpan keadaan saat ini dari seluruh dokumen, dan memeriksa setiap properti setiap elemen menjadi sama.
Mungkin jika Anda hanya tertarik pada elemen dan urutannya (seperti yang Anda sebutkan dalam pertanyaan Anda), sebuah
getElementsByTagName("*")
kaleng bisa berfungsi. Ini akan diaktifkan secara otomatis jika Anda menambahkan elemen, menghapus elemen, mengganti elemen atau mengubah struktur dokumen.Saya menulis bukti konsep:
Pemakaian:
Ini berfungsi pada IE 5.5+, FF 2+, Chrome, Safari 3+ dan Opera 9.6+
sumber
Sejauh ini, inilah pendekatan pamungkas, dengan kode terkecil:
IE9 +, FF, Webkit:
sumber
mutations, observer
parameter ke fungsi panggilan balik untuk kontrol lebih lanjut.Baru-baru ini saya menulis sebuah plugin yang melakukan hal itu - jquery.initialize
Anda menggunakannya dengan cara yang sama seperti
.each
fungsiPerbedaannya
.each
adalah - dibutuhkan pemilih Anda, dalam hal ini.some-element
dan menunggu elemen baru dengan pemilih ini di masa mendatang, jika elemen tersebut akan ditambahkan, ia akan diinisialisasi juga.Dalam kasus kami, inisialisasi fungsi hanya mengubah warna elemen menjadi biru. Jadi jika kita akan menambahkan elemen baru (tidak peduli apakah dengan ajax atau bahkan inspektur F12 atau apa pun) seperti:
Plugin akan langsung melakukannya. Plugin juga memastikan satu elemen diinisialisasi hanya sekali. Jadi jika Anda menambahkan elemen, maka
.detach()
dari tubuh dan kemudian menambahkannya lagi, itu tidak akan diinisialisasi lagi.Plugin didasarkan pada
MutationObserver
- itu akan bekerja pada IE9 dan 10 dengan dependensi seperti yang dirinci pada halaman readme .sumber
atau Anda cukup Buat acara Anda sendiri , yang berjalan di mana-mana
Contoh lengkap http://jsfiddle.net/hbmaam/Mq7NX/
sumber
Ini adalah contoh menggunakan MutationObserver dari Mozilla yang diadaptasi dari posting blog ini
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
sumber
Gunakan antarmuka MutationObserver seperti yang ditunjukkan di blog Gabriele Romanato
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
sumber
Bagaimana kalau memperpanjang jquery untuk ini?
Jquery 1.9+ telah membangun dukungan untuk ini (saya dengar belum diuji).
sumber