Agregue un elemento cuando se llame al evento "DOMNodeInserted"

Quiero agregar un elemento después de cada botón "Me gusta" (extensión de Chrome). Dado que las publicaciones se agregan a la fuente de noticias sin actualizar la página, tengo que agregar un detector de eventos "DOMNodeInserted". Pero cuando trato de poner el after() funciona dentro de él, no funciona.

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") a document se cuelga toda la pagina.

preguntado el 19 de mayo de 12 a las 19:05

2 Respuestas

si desea agregar un detector de eventos en jQuery, ese no es el método, la forma correcta siempre debe ser:

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

Con esto en mente, puedes 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 necesita usar javascript simple y no jQuery.

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

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


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

Puedes ver lo que está pasando...

Le sugiero que escuche el método correcto y agregue su span ahí...

Respondido 31 ago 13, 03:08

Si uso el segundo método, ¿qué función debo usar en lugar de after() en jQuery? - nadav s.

no puede insertar un nodo dentro de su oyente para DOMNodeInserted o obtienes un ciclo infinito... después de usar el .after() para insertar el nuevo nodo, el DOMNodeInserted será llamado nuevamente (ya que ha insertado un nodo DOM) y así sucesivamente, y así sucesivamente... - balexandre

si tienes razón, tienes alguna sugerencia? Ya probé muchas cosas como setInterval()... - nadav s.

sugerir de que? no dices lo que quieres hacer... y si escribo, deberías votar a favor;) - tal vez puedas preguntar algo diferente en una nueva pregunta, ¿no? Y luego deje la URL de su nueva pregunta aquí, para que pueda ver qué está tratando de hacer... - balexandre

Echa un vistazo aquí - nadav s.

si tiene el problema de que su código se ejecuta solo una vez en la función jquery .on (), entonces debe colocarlo en addEventListner como el siguiente ejemplo //

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

Respondido 23 Feb 17, 10:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.