В чем разница между использованием waitForKeyElements
и 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 */
waitForKeyElements ("[id$='adblockinfo']", killNode);
function killNode (elem) {
elem.remove();
}
но я обычно делаю что-то вроде
// ==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, он, конечно, знает, что делает.
но я все же хотел бы узнать о различиях между этими двумя методами.
Учитывая имя и использование, waitForKeyElements будет ... хорошо ... ждать (и продолжать ждать ), пока эти элементы не будут доступны. В то время как ваш do c .on (готово) может быть легко обойден с помощью setTimeout или ajax load. Кроме того, waitForKeyElements опрашивает DOM для элементов (каждые 300 мс от источника), в то время как .on (load) срабатывает немедленно. - freedomn-m
Не стесняйтесь меня поправить по этому поводу:
я мог бы имитировать c это поведение, просто удалив селектор, так что весь документ и его потомки будут отслеживаться.
как в
elem = $('#killme')
$(document).on('load ready', function() {
elem.remove();
});
это то, что я понял из https://api.jquery.com/on/
Если селектор опущен или равен нулю, событие обработчик упоминается как прямой или напрямую связанный. Обработчик вызывается каждый раз, когда происходит событие на выбранных элементах, независимо от того, происходит ли оно непосредственно на элементе или всплывает из дочернего (внутреннего) элемента.