Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用'waitForKeyElements'和JQuery`.on()有什么区别?_Javascript_Jquery_Greasemonkey_Tampermonkey_Userscripts - Fatal编程技术网

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