2012-05-19 11 views
5

Quiero agregar un elemento después de cada botón "me gusta" (extensión de cromo). Como las publicaciones se agregan a la fuente de noticias sin refrescar la página, tengo que agregar un detector de eventos "DOMNodeInserted". Pero cuando intento poner la función after() dentro, no funciona.Agregar un elemento cuando el evento "DOMNodeInserted" llamado

Código:

$("#contentArea").addEventListener("DOMNodeInserted", function(event) { 
     $(".like_link").after('<span class="dot"> · </span><button class="taheles_link stat_elem as_link" title="תגיד תכל&acute;ס" type="submit" name="taheles" onclick="apply_taheles()" data-ft="{&quot;tn&quot;:&quot;&gt;&quot;,&quot;type&quot;:22}"><span class="taheles_default_message">תכל&acute;ס</span><span class="taheles_saving_message">לא תכלס</span></button>'); 
     $(".taheles_saving_message").hide(); 
    }); 

Cuando cambio $("#contentArea")-document se bloquea toda la página.

Respuesta

7

si desea añadir un detector de eventos en jQuery, que no es el método, la forma corecta siempre debe ser:

$(document or window).bind(your_event_name, function(event) { your_callback }); 

con esto en mente, se puede escribir:

$(document).bind('DOMNodeInserted', function(event) { 

    alert('inserted ' + event.target.nodeName + // new node 
      ' in ' + event.relatedNode.nodeName); // parent 

}); 

o haga lo que necesita realizar cada vez que se inserta un nodo en el DOM.


para su información, si desea utilizar addEventListener es necesario utilizar llanura javascript y jQuery no.

document.addEventListener("DOMNodeInserted", function() { 
    // your code 
}, false); 

Editar: Como en jQuery 1.7, por favor, utilice la función '.en' en su lugar: http://api.jquery.com/on/


otro error que surge de su método (si funcionaba) que se romperá su aplicación como está insertando un nodo y llama al DOMNodeInserted (porque ha insertado un nodo) y eso insertará el nodo nuevamente, y llame de nuevo al DOMNodeInserted ...

se puede ver lo que está pasando ...

Yo sugeriría que se escucha el método correcto y anexar su span allí ...

+0

Si utilizo el segundo método, qué función debería utilizar en lugar de después() en jQuery? –

+0

no se puede insertar un nodo dentro de su oyente para 'DOMNodeInserted' o se obtiene un bucle infinito ... después de usar el' .after() 'para insertar el nuevo nodo, el' DOMNodeInserted' se volverá a llamar (como ha insertado un nodo DOM) y así sucesivamente, y en, y en ... – balexandre

+0

sí, tiene razón, ¿tiene alguna sugerencia? Ya probé muchas cosas como setInterval() ... –

0

si se enfrentan a un problema de que el código se ejecuta en virtud de una sola vez en la función jQuery .on(), entonces su debe ponerlo bajo addEventListner ejemplo, como a continuación //

document.addEventListener('DOMNodeInserted', function(e) { 
    $("selector").on('DOMNodeInserted', function(e) { 
     //your code which you want to execute each time DOMNodeInserted 
    }); 
}); 
Cuestiones relacionadas