Aku punya div yang memiliki isinya berubah sepanjang waktu, baik itu ajax requests
, jquery functions
, blur
dll dll
Apakah ada cara saya dapat mendeteksi perubahan pada div saya pada suatu titik waktu?
Saya tidak ingin menggunakan interval atau nilai default yang dicentang.
Sesuatu seperti ini akan dilakukan
$('mydiv').contentchanged() {
alert('changed')
}
keypress
acara ke<div>
elemen yang dapat diedit . Saya tidak yakin solusi di sana berlaku untuk ini. Mereka pasti tidak akan mengambil perubahan terprogram untuk konten suatu elemen.Jawaban:
Jika Anda tidak ingin menggunakan penghitung waktu dan periksa innerHTML Anda dapat mencoba acara ini
Lebih detail dan data dukungan peramban ada di Sini .
Perhatian: di versi jQuery yang lebih baru, bind () sudah usang, jadi Anda harus menggunakan on () sebagai gantinya:
sumber
$("body").on('DOMSubtreeModified', "mydiv", function() { });
Menggunakan Javascript MutationObserver
sumber
Karena
$("#selector").bind()
sudah usang , Anda harus menggunakan:sumber
#
untuk menunjukkan bahwa simbol harus ada sebelum pemilih.Anda bisa mencoba ini
tetapi ini mungkin tidak berfungsi di internet explorer, belum mengujinya
sumber
clearTimeout(window.something); window.something = setTimeout(...);
Anda mencari MutationObserver atau Acara Mutasi . Tidak didukung di mana-mana dan tidak dipandang terlalu sayang oleh dunia pengembang.
Jika Anda tahu (dan dapat memastikan bahwa) ukuran div akan berubah, Anda mungkin dapat menggunakan event resize crossbrowser .
sumber
Kode berikut berfungsi untuk saya.
Semoga ini bisa membantu seseorang :)
sumber
Tidak ada solusi bawaan untuk masalah ini, ini adalah masalah dengan desain dan pola pengkodean Anda.
Anda dapat menggunakan pola penerbit / pelanggan. Untuk ini, Anda dapat menggunakan acara khusus jQuery atau mekanisme acara Anda sendiri.
Pertama,
Sekarang Anda dapat berlangganan acara divhtmlchanging / divhtmlchanged sebagai berikut,
Sekarang, Anda harus mengubah perubahan konten div Anda melalui
changeHtml()
fungsi ini . Jadi, Anda dapat memantau atau dapat melakukan perubahan yang diperlukan karena mengikat argumen data panggilan balik yang berisi informasi.Anda harus mengubah html div Anda seperti ini;
Dan juga, Anda dapat menggunakan ini untuk elemen html apa pun kecuali elemen input. Pokoknya Anda dapat memodifikasi ini untuk digunakan dengan elemen apa saja.
sumber
Gunakan MutationObserver seperti yang terlihat dalam cuplikan ini yang disediakan oleh Mozilla , dan diadaptasi dari posting blog ini
Atau, Anda dapat menggunakan contoh JQuery yang terlihat di tautan ini
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
sumber
Anda bisa menyimpan innerHTML lama dari div dalam sebuah variabel. Tetapkan interval untuk memeriksa apakah konten lama cocok dengan konten saat ini. Ketika ini tidak benar, lakukan sesuatu.
sumber
Coba MutationObserver:
dukungan browser: http://caniuse.com/#feat=mutationobserver
sumber
Menambahkan beberapa konten ke div, baik melalui jQuery atau via de DOM-API secara langsung, default ke
.appendChild()
fungsi. Yang dapat Anda lakukan adalah menimpa.appendChild()
fungsi objek saat ini dan menerapkan pengamat di dalamnya. Sekarang setelah mengganti.appendChild()
fungsi kami , kami perlu meminjam fungsi itu dari objek lain untuk dapat menambahkan konten. Untuk itu kami memanggil.appendChild()
div lain untuk akhirnya menambahkan konten. Tentu, ini juga diperhitungkan untuk.removeChild()
.Di sini Anda dapat menemukan contoh naif. Anda bisa memperpanjangnya sendiri, saya kira. http://jsfiddle.net/RKLmA/31/
Ngomong-ngomong: ini menunjukkan JavaScript mematuhi prinsip OpenClosed. :)
sumber