Javascript 使用'waitForKeyElements'和JQuery`.on()有什么区别?
使用Javascript 使用'waitForKeyElements'和JQuery`.on()有什么区别?,javascript,jquery,greasemonkey,tampermonkey,userscripts,Javascript,Jquery,Greasemonkey,Tampermonkey,Userscripts,使用waitforkyelments和JQuery.on()有什么区别 如下面的改编的示例中所示,来自 但我通常会做这样的事情 // ==UserScript== // @name _delete Adblock blocking nodes // @match *://YOUR_SERVER.COM/YOUR_PATH/* // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js /
waitforkyelments
和JQuery.on()
有什么区别
如下面的改编的示例中所示,来自
但我通常会做这样的事情
// ==UserScript==
// @name _delete Adblock blocking nodes
// @match *://YOUR_SERVER.COM/YOUR_PATH/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// @grant GM.getValue
// ==/UserScript==
//- The @grant directives are needed to restore the proper sandbox.
/* global $, waitForKeyElements */
elem = $('#killme')
$(document).on('load ready', elem, function() {
$(this).remove();
});
鉴于作者在javascript方面的()经验,他当然知道自己在做什么。但我仍然想了解这两种技术之间的区别
给定名称和用法,WaitFork将。。。好。。。等待 (并继续等待)直到这些元素可用。当你 可以通过setTimeout或ajax加载轻松绕过doc.on(ready)。 此外,WaitFork还轮询DOM中的元素(每个 距离震源300毫秒),而on(负载)将立即开火 弗里多姆 请随时纠正我的错误:
我可以通过移除选择器来模拟这种行为,这样整个文档及其子体都会受到监控 如 这就是我从中学到的
如果选择器被省略或为null,则事件处理程序称为直接或直接绑定。每当所选元素上发生事件时,都会调用该处理程序,无论事件是直接发生在该元素上还是从后代(内部)元素冒泡而来。如果查看事件源,您可以看到它是如何工作的 简单地说,它将您提供的回调函数放置在每300ms运行一次的
setInterval()
中。在这个时间间隔内,它检查DOM以查看您提供的选择器是否存在。创建元素时,它将执行回调
这不同于jQuery的on()
方法,因为它用于绑定从动态创建的元素引发的事件。当新元素实际创建时,它不会做任何事情
关于
waitforkyelments
的实现,由于各种原因,它远不是一个理想的解决方案,尤其是性能。如果您需要知道动态元素是何时创建的,请改用。如果您查看动态元素的源代码,您可以看到它是如何工作的
简单地说,它将您提供的回调函数放置在每300ms运行一次的setInterval()
中。在这个时间间隔内,它检查DOM以查看您提供的选择器是否存在。创建元素时,它将执行回调
这不同于jQuery的on()
方法,因为它用于绑定从动态创建的元素引发的事件。当新元素实际创建时,它不会做任何事情
关于waitforkyelments
的实现,由于各种原因,它远不是一个理想的解决方案,尤其是性能。如果您需要知道动态元素是何时创建的,请改为使用。@freedomn-m
给定名称和用法,WaitFork将。。。好。。。等待(并保持等待),直到这些元素可用。而您的doc.on(ready)可以通过setTimeout或ajax加载轻松绕过。此外,waitfork会在.on(load)立即启动时轮询DOM中的元素(距源每隔300ms)弗里多姆 添加HTMLDOM元素不会引发load/ready事件$(“#mydiv”).append(“”)不会启动load/ready,但WaitForkEyelments将在下次轮询时找到#newdiv.–弗里多姆
根据@Rory的回答,WaitForkEyelments是(过于简单的)MutationObserver的替代品,而不是load/ready事件freedomn-m@freedomn-m
给定名称和用法,WaitFork将。。。好。。。等待(并保持等待),直到这些元素可用。而您的doc.on(ready)可以通过setTimeout或ajax加载轻松绕过。此外,waitfork会在.on(load)立即启动时轮询DOM中的元素(距源每隔300ms)弗里多姆 添加HTMLDOM元素不会引发load/ready事件$(“#mydiv”).append(“”)不会启动load/ready,但WaitForkEyelments将在下次轮询时找到#newdiv.–弗里多姆
根据@Rory的回答,WaitForkEyelments是(过于简单的)MutationObserver的替代品,而不是load/ready事件弗里多姆@Kevin B “load”仅在要加载的元素完成加载某物时触发。例如,图像、iFrame和窗口。“ready”只等待DOMReady,只有一个DOMReady,它不是单个元素所拥有的。jQuery实际上没有任何功能可以与给定代码的功能相匹配凯文B load是否会在不再是document或img的元素上触发罗里·麦克罗森 它可以。。。如果它的触发方式会使它们产生泡沫。但默认情况下,答案是否定的——凯文B 如果您愿意,请将它们转换为答案,我不再提供实际答案凯文B@凯文B “load”仅在要加载的元素完成加载某物时触发。例如,图像、iFrame和窗口。“ready”只等待DOMReady,只有一个DOMReady,它不是单个元素所拥有的。jQuery实际上没有任何功能可以与给定代码的功能相匹配凯文B load是否会在不再是document或img的元素上触发罗里·麦克罗森 它可以。。。如果它的触发方式会使它们产生泡沫。但默认情况下,答案是否定的——凯文B
如果您愿意,请将它们转换为答案,我不再提供实际答案Kevin B根据名字和用法,Waitfork将。。。好。。。等待(并保持等待),直到这些元素可用。而您的doc.on(ready)可以通过setTimeout或ajax加载轻松绕过。此外,waitforkyellements在
.on(load)时轮询DOM中的元素(从源代码开始每隔300ms一次)<
// ==UserScript==
// @name _delete Adblock blocking nodes
// @match *://YOUR_SERVER.COM/YOUR_PATH/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// @grant GM.getValue
// ==/UserScript==
//- The @grant directives are needed to restore the proper sandbox.
/* global $, waitForKeyElements */
elem = $('#killme')
$(document).on('load ready', elem, function() {
$(this).remove();
});
elem = $('#killme')
$(document).on('load ready', function() {
elem.remove();
});