change()
fungsi berfungsi dan mendeteksi perubahan pada elemen formulir, tetapi adakah cara untuk mendeteksi ketika konten elemen DOM diubah?
Ini tidak bekerja, kecuali #content
elemen formulir
$("#content").change( function(){
// do something
});
Saya ingin ini terpicu saat melakukan sesuatu seperti:
$("#content").html('something');
Juga html()
atau append()
fungsi tidak memiliki panggilan balik.
Ada saran?
javascript
jquery
dom
Elzo Valugi
sumber
sumber
Jawaban:
Ini adalah peristiwa mutasi .
Saya belum pernah menggunakan API peristiwa mutasi di jQuery, tetapi pencarian sepintas membawa saya ke proyek ini di GitHub. Saya tidak mengetahui kematangan proyek.
sumber
Saya tahu posting ini berumur satu tahun, tetapi saya ingin memberikan pendekatan solusi yang berbeda untuk mereka yang memiliki masalah serupa:
Peristiwa perubahan jQuery hanya digunakan pada bidang masukan pengguna karena jika ada hal lain yang dimanipulasi (misalnya, div), manipulasi itu datang dari kode. Jadi, temukan di mana manipulasi terjadi, lalu tambahkan apa pun yang Anda butuhkan di sana.
Tetapi jika itu tidak mungkin karena alasan apa pun (Anda menggunakan plugin yang rumit atau tidak dapat menemukan kemungkinan "panggilan balik") maka pendekatan jQuery yang saya sarankan adalah:
Sebuah. Untuk manipulasi DOM sederhana, gunakan jQuery chaining dan traversing,
$("#content").html('something').end().find(whatever)....
b. Jika Anda ingin melakukan sesuatu yang lain, gunakan jQuery
bind
dengan acara khusus dantriggerHandler
Berikut link ke jQuery trigger handler: http://api.jquery.com/triggerHandler/
sumber
bind
adalah mengharapkan pawang Anda mengembalikan abool
.Browser tidak akan mengaktifkan peristiwa onchange untuk
<div>
elemen.Saya pikir alasan di balik ini adalah bahwa elemen-elemen ini tidak akan berubah kecuali dimodifikasi oleh javascript. Jika Anda sudah harus memodifikasi elemen sendiri (daripada pengguna yang melakukannya), Anda dapat memanggil kode yang menyertai pada saat yang sama Anda memodifikasi elemen, seperti:
Anda juga dapat mengaktifkan peristiwa seperti ini secara manual:
Jika tidak satu pun dari solusi ini berhasil untuk situasi Anda, dapatkah Anda memberikan informasi lebih lanjut tentang apa yang secara khusus ingin Anda capai?
sumber
bagaimana dengan http://jsbin.com/esepal/2
sumber
Cobalah untuk mengikat ke
DOMSubtreeModified
event seeign karena tes juga hanya bagian dari DOM.lihat posting ini di sini di SO:
bagaimana-melakukan-i-monitor-the-dom-for-changes
sumber
Coba ini, itu dibuat oleh James Padolsey (JP di sini di SO) dan melakukan apa yang Anda inginkan (menurut saya)
http://james.padolsey.com/javascript/monitoring-dom-properties/
sumber
Dan dengan HTML5 kami memiliki Pengamat Mutasi DOM asli .
sumber
Ini bukan hanya jawaban jQuery - tetapi berguna untuk disebutkan untuk debugging.
Di Firebug Anda bisa mengklik kanan pada elemen di pohon DOM dan mengatur 'Break on Attribute Change':
Ketika atribut diubah dalam skrip, jendela debug akan muncul dan Anda dapat melacak apa yang terjadi. Ada juga opsi untuk penyisipan elemen dan penghapusan elemen di bawah ini (tanpa bantuan dikaburkan oleh munculan di screengrab).
sumber
Saya sedang mengembangkan perpustakaan JS kecil yang disebut mutabor ( https://github.com/eskat0n/mutabor ) yang dimaksudkan untuk menyederhanakan penggunaan Peristiwa Mutasi DOM. Lihat demo.html sebagai contoh.
sumber
Coba plugin livequery. Itu sepertinya berhasil untuk sesuatu yang serupa yang saya lakukan.
http://docs.jquery.com/Plugins/livequery
sumber
Seringkali cara yang sederhana dan efektif untuk mencapainya adalah dengan melacak kapan dan di mana Anda memodifikasi DOM.
Anda dapat melakukan ini dengan membuat satu fungsi sentral yang selalu bertanggung jawab untuk memodifikasi DOM. Anda kemudian melakukan pembersihan apa pun yang Anda butuhkan pada elemen yang dimodifikasi dari dalam fungsi ini.
Dalam aplikasi baru-baru ini, saya tidak memerlukan tindakan segera, jadi saya menggunakan callback untuk fungsi handly load (), untuk menambahkan kelas ke elemen yang dimodifikasi dan kemudian memperbarui semua elemen yang dimodifikasi setiap beberapa detik dengan timer setInterval.
Kemudian Anda dapat menanganinya sesuka Anda - mis
sumber
Anda dapat menambahkan opsi panggilan balik ke fungsi html (, atau apa pun):
Demo di sini.
Anda melakukan perubahan pada beberapa elemen, bukan elemen tersebut dipaksa untuk diubah oleh sesuatu yang harus Anda tangkap.
sumber
Saya menulis potongan yang akan memeriksa perubahan elemen pada sebuah acara.
Jadi jika Anda menggunakan kode javascript pihak ketiga atau sesuatu dan Anda perlu tahu ketika sesuatu muncul atau berubah ketika Anda telah mengklik maka Anda bisa.
Untuk potongan di bawah ini, katakanlah Anda perlu tahu kapan konten tabel berubah setelah Anda mengklik tombol.
Kode Pseudo:
sumber
Kami dapat mencapai ini dengan menggunakan Peristiwa Mutasi . Menurut www.w3.org, Modul peristiwa mutasi dirancang untuk memungkinkan pemberitahuan tentang perubahan apa pun pada struktur dokumen, termasuk modifikasi attr dan teks. Untuk lebih detail ACARA MUTASI
Sebagai contoh :
sumber
Tidak mungkin, saya yakin ada acara yang diubah kontennya tetapi jelas bukan x-browser
Haruskah saya katakan tidak mungkin tanpa jeda yang buruk di latar belakang!
sumber