0
所以我想改變我的一些JavaScript的的JavaScript捕獲的事件偵聽器和MutationObserver
從這個
content.forumobserver = content.build.forumobserver = function() {
var target = document.querySelector('#content-padding');
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function(mutation, idx, mutated) {
if(mutation.addedNodes.length === 21) {
for(var i = 0; i < mutation.addedNodes.length; i++) {
if(mutation.addedNodes[i].id === 'post_container') {
// update
content.c_page = document.querySelector('.page_current');
content.t_url = content.c_page.href;
content.t_page = content.t_url.replace(content.regex.url, '$3');
// reload
content.init(options);
// page is loaded
observer.disconnect();
};
};
};
});
});
$.each(document.querySelectorAll('.yui3-pjax'), function(idx, pjax) {
pjax.addEventListener('click', function() {
observer.observe(target, {
childList: true
});
});
});
};
對此
content.forumobserver = content.build.forumobserver = function() {
var target = document.querySelector('#content-padding');
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function(mutation, idx, mutated) {
if(mutation.addedNodes.length === 21) {
for(var i = 0; i < mutation.addedNodes.length; i++) {
if(mutation.addedNodes[i].id === 'post_container') {
// update
content.c_page = document.querySelector('.page_current');
content.t_url = content.c_page.href;
content.t_page = content.t_url.replace(content.regex.url, '$3');
// reload
content.init(prefs);
// page is loaded
observer.disconnect();
};
};
};
});
});
document.body.addEventListener('click', function(evt) {
if(evt.target.classList.contains('yui3-pjax')) {
observer.observe(target, {
childList: true
});
};
}, true);
};
唯一的問題是,後者這兩個觀察者在達到我想要的位置時不會斷開連接。我在content.init()函數中調用content.forumobserver()。我知道這是不是說斷開添加多個事件偵聽器的身體,而不是原因,是因爲如果我添加一個if語句來檢查的初始值,然後調用content.forumobserver(),並設置中的內容初始化爲true。 init()函數的MutationObserver仍然重新將所有的內容,但隨後其他頁面加載加入被加倍,1,2,4,8,等等上的內容。
那麼,怎樣才能讓我的MutationObserver斷開捕獲的事件,而不必顯式綁定點擊事件到YUI3-pjax錨的內容加載後?