Удаление узла по классу не работает в моем скрипте Tampermonkey? - PullRequest
0 голосов
/ 27 мая 2019

Я знаю, как удалить div по классу (document.getElementsByClassName('Button')[0].remove()).
Но когда это в ссылке:

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

это не работает.

Почему бы и нет?

1 Ответ

0 голосов
/ 27 мая 2019

Проблема в , вероятно , в том, что страница динамически добавляет эту ссылку, используя javascript (AJAX).
(Кроме того, код вопроса убил бы только первый такойузел, а тот, который вы хотите удалить, может быть позже.)

В этом случае вам нужно использовать AJAX-компенсирующие методы, такие как MutationObserver или waitForKeyElements (или неуклюжие таймеры с ручным кодированием).

Вот надежный способ (полный рабочий скрипт):

// ==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 селектор для узлов с классом Button.
  2. Показанный код удаляет все узлы с классом Button.Чтобы удалить только первый узел, используйте: waitForKeyElements (".Button", removeNode, true); - но это редко требуется.
  3. См. Выбор и активация правильных элементов управления на сайте под управлением AJAX для получения советов по идентификации иуточняющие селекторы.
...