调用“DOMNodeInserted”事件时添加元素

时间:2012-05-19 18:42:05

标签: javascript jquery facebook dom

我想在每个“喜欢”按钮(chrome扩展名)后添加一个元素。由于帖子已添加到新闻Feed而不刷新页面,因此我必须添加一个事件监听器“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时,它会崩溃所有页面。

2 个答案:

答案 0 :(得分: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附加到那里......

答案 1 :(得分:0)

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

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