2012-05-19 51 views
5

時,添加一個元素我想在每個「like」按鈕(chrome擴展名)後添加一個元素。由於帖子被添加到新聞提要而不刷新頁面,所以我必須添加一個事件監聽器「DOMNodeInserted」。但是當我嘗試將after()函數放入其中時,它不起作用。當「DOMNodeInserted」事件調用

代碼:

$("#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崩潰的所有頁面。

回答

7

,如果你想在jQuery中添加事件偵聽器,這不是法,corect方式應該永遠是:

$(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,請使用 '對' 函數:http://api.jquery.com/on/


,來了你的方法(如果它的工作),另一個錯誤是你將打破你的應用程序,你是插入節點並調用DOMNodeInserted(因爲你已經插入一個節點),這將再次插入節點,並再次調用DOMNodeInserted ...

你可以看到正在發生的事情...

我建議你聽正確的方法和追加的span那裏......

+0

如果我使用第二種方法,我應該後()jQuery中使用,而不是什麼功能? –

+0

你不能在DOMNodeInserted的偵聽器中插入一個節點,或者你得到一個無限循環......在你使用'.after()'插入新節點之後,DOMNodeInserted'會再次被調用(如你已經插入了一個DOM節點)等等,並在...上,然後... – balexandre

+0

是的,你是對的,你有什麼建議嗎?我已經嘗試了很多東西像setInterval()... –

0

如果你是下運行您的代碼只有一次面臨的問題jQuery中。對()函數,那麼你應該把它addEventListner下像下面的例子//

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