2012-05-19 36 views
5

Tôi muốn thêm phần tử sau mỗi nút "thích" (tiện ích chrome). Vì bài đăng được thêm vào nguồn cấp tin tức mà không làm mới trang, tôi phải thêm trình xử lý sự kiện "DOMNodeInserted". Nhưng khi tôi cố gắng đặt hàm after() bên trong nó, nó không hoạt động.Thêm phần tử khi sự kiện "DOMNodeInserted" được gọi là

Code:

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

Khi tôi thay đổi $("#contentArea")-document nó bị treo tất cả các trang.

Trả lời

7

nếu bạn muốn nghe thêm một sự kiện trong jQuery, đó không phải là phương pháp, cách corect nên luôn luôn là:

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

với điều này trong tâm trí, bạn có thể viết:

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

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

}); 

hoặc thực hiện những gì bạn cần thực hiện mỗi khi một nút được chèn vào DOM.


để biết thông tin của bạn, nếu bạn muốn sử dụng addEventListener bạn cần sử dụng javascript thuần túy chứ không phải jQuery.

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

Edit: Như trên jQuery 1.7, xin vui lòng sử dụng chức năng '.Trên' thay vì: http://api.jquery.com/on/


khác lỗi mà đi lên của phương pháp của bạn (nếu nó làm việc) là bạn sẽ phá vỡ ứng dụng của bạn khi bạn đang chèn một nút và gọi số DOMNodeInserted (nguyên nhân bạn đã chèn nút) và sẽ chèn lại nút và gọi lại DOMNodeInserted một lần nữa ...

bạn có thể xem những gì đang xảy ra ...

tôi sẽ đề nghị bạn nên lắng nghe những phương pháp chính xác và thêm span bạn có ...

+0

Nếu tôi sử dụng phương thức thứ hai, tôi nên sử dụng hàm nào thay vì sau() trong jQuery? –

+0

bạn không thể chèn một nút bên trong trình lắng nghe của bạn cho 'DOMNodeInserted' hoặc bạn nhận được một vòng lặp vô hạn ... sau khi bạn sử dụng' .after() 'để chèn nút mới,' DOMNodeInserted' sẽ được gọi lại (như bạn đã chèn một nút DOM) và cứ tiếp tục, và bật, và trên ... – balexandre

+0

có bạn đúng, bạn có gợi ý gì không? Tôi đã thử nhiều thứ như setInterval() ... –

0

nếu bạn đang phải đối mặt với vấn đề mà mã của bạn dưới chạy một lần duy nhất trong hàm jquery .on() thì bạn nên đặt nó dưới addEventListner như dưới đây //

document.addEventListener('DOMNodeInserted', function(e) { 
    $("selector").on('DOMNodeInserted', function(e) { 
     //your code which you want to execute each time DOMNodeInserted 
    }); 
}); 
Các vấn đề liên quan