您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Waits for selectors to match newly added nodes
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://updategreasyfork.deno.dev/scripts/432418/970668/Wait%20For%20Selector.js
// ==UserScript== // @name Wait For Selector // @version 0.1.0 // @description Waits for selectors to match newly added nodes // @author Kumirei // @include *community.wanikani.com* // @grant none // ==/UserScript== (function($) { // Create new observer on body to monitor all DOM changes let observer = new MutationObserver(mutationHandler) observer.observe(document.getElementsByTagName('body')[0], {childList: true, subtree: true}) // Interface for interacting with the library let interface = { version: GM_info.script.version, observer: observer, wait: waitForSelector, unwait: unwaitID, waits: {}, waitsByID: {}, nextID: 0 } // Start installInterface() // Creates a new entry to search for whenever a new element is added to the DOM function waitForSelector(preSelector, selector, callback) { if (selector.match(`${preSelector}$`) === null) throw ('preSelector must match the end of the selector') if (!interface.waits[selector]) interface.waits[selector] = {} interface.waits[selector][interface.nextID] = callback interface.waits[selector].pre = preSelector interface.waitsByID[interface.nextID] = selector return interface.nextID++ } // Deletes a previously registered selector function unwaitID(ID) { delete interface.waits[interface.waitsByID[ID]][ID] } // Makes sure that the public interface is the newest version and the same as the local one function installInterface() { let wfke = window.wkfe if (!wfke) window.wfke = interface else if (wfke.version < interface.version) { wfke.version = interface.version wfke.observer.disconnect() wfke.observer = interface.observer wfke.wait = interface.wait wfke.unwait = interface.unwait } interface = wfke || interface } // Searches the added nodes and matches them with the provided selectors. Calls the callback for every match. function mutationHandler(mutations) { for (let mutation of mutations) { let added = mutation.addedNodes for (let node of added) { if (node.nodeType === 1) { let sibling = node.previousElementSibling let target = sibling ? sibling : node.parentElement for (let selector in interface.waits) { let query = (sibling?'+ ':'> ')+interface.waits[selector].pre $(target).find(query).each((i, e)=>{ $(selector).each((I, E)=>{ if (e.isSameNode(E)) { for (let callback of Object.values(interface.waits[selector])) { if (typeof callback === "function") callback(E) } } }) }) } } } } } })(window.jQuery);