Enganchar sobre a adição de novos elementos DOM com jQuery (JS ou simples)
Pergunta
Para ser claro: não estou pedindo como colocar ganchos existentes em novos elementos DOM. Eu sei sobre a função ao vivo () e o velho plug-in livequery. Estou pedindo algo mais.
O que eu quero saber é como ligar para a própria criação de novos elementos DOM. A razão que eu estou pedindo é que eu estou criando um script JS usuário de terceiros que não tem controle sobre scripts de first-party. Esses scripts primários (que são ofuscados) atualizar a página periodicamente, adicionando novos elementos DOM. Eu quero executar código após esses elementos são adicionados.
Usando $ ( '...') .bind ( 'ajaxSuccess', function () .....) funciona para algumas adições, mas não todos eles.
Nenhuma solução correta
Outras dicas
Se eles estão sempre a ser adicionado com o método document.createElement você pode simplesmente substituí-lo e fazer o seu rastreamento lá.
document.replacedCreateElement = document.createElement;
document.createElement = function(tagName) {
this.replacedCreateElement(tagName);
//do your tracking
}
Eu não sei por que você perguntar se você sabe sobre livequery . livequery permitirá que você ligar para novos elementos DOM arbitrárias. Fora isso, a única coisa que sei fazer é ligar para o métodos DOM (como appendChild etc ...)
A função vivo (), que foi integrado jQuery realmente não é a implementação livequery completo. (Resig pensei que era demasiado funcionalidade para ser integrado sem estourar o tamanho do código-se muito longe)
Em directo (), o que está faltando é a seguinte função digite:
$('*').livequery(function() {
// do something
});
Use isto, e ele deve pegar todas as adições.
Bem, eu fui com este par, que parece fogo sobre as atualizações DOM desejados dentro de 20 segundos ou menos:
$( '#someid' ).bind( 'ajaxSuccess', function() { ... } );
$( '#someid' ).ajaxSuccess( function( e, r, s ) { ... } );
Eu prefiro não ter de página de carregamento lento por dependendo livequery, ea solução replacedCreateElement goleou o CPU.