6

我想在每个“喜欢”按钮(chrome 扩展名)之后添加一个元素。由于在不刷新页面的情况下将帖子添加到新闻提要中,因此我必须添加一个事件侦听器“ DOMNodeInserted”。但是当我尝试将after()函数放入其中时,它不起作用。

代码:

    $("#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(); 
    });

当我更改$("#contentArea")document它时,所有页面都会崩溃。

4

2 回答 2

7

如果你想在jQuery中添加一个事件监听器,那不是方法,正确的方法应该总是:

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

考虑到这一点,您可以编写:

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

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

});

或者每次在 DOM 中插入节点时执行您需要执行的操作。


供您参考,如果您想使用addEventListener,您需要使用纯 javascript 而不是 jQuery。

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

编辑:与 jQuery 1.7 一样,请改用“.on”函数:http: //api.jquery.com/on/


您的方法出现的另一个错误(如果有效)是您将在插入节点并调用时破坏应用程序DOMNodeInserted(因为您已插入节点)并且将再次插入节点并再次调用DOMNodeInserted。 ..

你可以看到发生了什么...

我建议您听正确的方法并在span此处附加您的...

于 2012-05-19T18:46:08.690 回答
0

如果您遇到的问题是您的代码在 jquery .on() 函数中只运行一次,那么您应该将它放在 addEventListner 下,如下例所示 //

document.addEventListener('DOMNodeInserted', function(e) {
    $("selector").on('DOMNodeInserted', function(e)   {
       //your code which you want to execute each time DOMNodeInserted
    });
});
于 2017-02-23T10:28:14.467 回答