gpt4 book ai didi

JavaScript 捕获事件监听器和 MutationObserver

转载 作者:行者123 更新时间:2023-12-03 12:25:42 25 4
gpt4 key购买 nike

所以我正在尝试更改一些 JavaScript

从此

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 断开连接,而不必将点击事件显式绑定(bind)到 yui3-pjax anchor ?

最佳答案

通过使用解决了这个问题,

content.forumobserver = content.build.forumobserver = function(evt) {
if(evt.target.classList.contains('yui3-pjax') || evt.target.parentNode.classList.contains('yui3-pjax')) {
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();
};
};
};
});
});
observer.observe(target, {
childList: true
});
};
};

document.body.addEventListener('click', content.forumobserver, true);

关于JavaScript 捕获事件监听器和 MutationObserver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com