我想在每个“喜欢”按钮(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="תגיד תכל´ס" type="submit" name="taheles" onclick="apply_taheles()" data-ft="{"tn":">","type":22}"><span class="taheles_default_message">תכל´ס</span><span class="taheles_saving_message">לא תכלס</span></button>');
$(".taheles_saving_message").hide();
});
当我将$("#contentArea")
更改为document
时,它会崩溃所有页面。
答案 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
});
});