按班级删除节点在我的Tampermonkey脚本中不起作用?

时间:2019-05-27 08:08:10

标签: javascript greasemonkey tampermonkey

我知道如何按类别(document.getElementsByClassName('Button')[0].remove())删除div。
但是当它在链接中时:

<a class="Button" href=""><span>test</span></a>

它不起作用。

为什么不呢?

1 个答案:

答案 0 :(得分:0)

问题是可能,该页面使用javascript(AJAX)动态添加了该链接。
(另外,问题代码只会杀死 first 这样的节点,而您想要的那个节点可能会稍后。)

在这种情况下,您需要使用MutationObserverwaitForKeyElements之类的AJAX补偿技术(或笨拙的手动编码计时器)。

这是一种可靠的方法(完整的工作脚本):

// ==UserScript==
// @name     _Remove node(s) with a specified class
// @match    *://YOUR_SERVER.COM/YOUR_PATH/*
// @noframes
// @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 (".Button", removeNode);

function removeNode (jNode) {
    jNode.remove ();
}

注释:

  1. .Button是CSS,jQuery selector是具有Button类的节点。
  2. 所示代码将删除所有类为Button的节点。要仅删除第一个节点,请使用:waitForKeyElements (".Button", removeNode, true);-但这很少需要。
  3. 有关识别和优化选择器的提示,请参见Choosing and activating the right controls on an AJAX-driven site