Agganciare l'aggiunta di nuovi elementi DOM con jQuery (o JS strisciamento)
Domanda
Per essere chiari: io non sto chiedendo come mettere i ganci esistenti su nuovi elementi DOM. So che sulla funzione dal vivo () e il vecchio plug-livequery. Sto chiedendo qualcos'altro.
Quello che voglio sapere è come collegare sulla stessa creazione di nuovi elementi DOM. Il motivo che mi chiedo è Sto creando uno script JS utente di terze parti che non ha il controllo sugli script first-party. Questi script di prima parte (che sono offuscati) aggiornare la pagina periodicamente con l'aggiunta di nuovi elementi DOM. Voglio eseguire codice dopo vengono aggiunti quegli elementi.
Utilizzando $ ( '...') .bind ( 'ajaxSuccess', function () .....) funziona per alcune aggiunte, ma non tutti.
Nessuna soluzione corretta
Altri suggerimenti
Se sono sempre stati aggiunti con il metodo document.createElement si potrebbe semplicemente sostituirlo e fare il monitoraggio in là.
document.replacedCreateElement = document.createElement;
document.createElement = function(tagName) {
this.replacedCreateElement(tagName);
//do your tracking
}
Non sono sicuro che il motivo per cui si chiede se si sa sulla livequery . livequery vi permetterà di collegare in nuovi elementi DOM arbitrari. Al di fuori di questo, l'unica cosa che so fare è gancio nei metodi DOM (ad esempio appendChild ecc ...)
La funzione Live (), che è stato integrato in jQuery realtà non è l'attuazione piena livequery. (Resig pensato che fosse troppo funzionalità per essere integrati senza dilapidare la dimensione del codice troppo in alto)
In vivo (), ciò che manca è la seguente funzione di tipo:
$('*').livequery(function() {
// do something
});
Con questo, e dovrebbe prendere eventuali integrazioni.
Bene, sono andato con questa coppia, che sembra sparare sui aggiornamenti DOM desiderati entro 20 secondi o meno:
$( '#someid' ).bind( 'ajaxSuccess', function() { ... } );
$( '#someid' ).ajaxSuccess( function( e, r, s ) { ... } );
preferirei non avere a rallentare il caricamento della pagina dalla seconda livequery, e la soluzione replacedCreateElement agitai la CPU.