Как сделать слова, начинающиеся с AB-clickable? - PullRequest
0 голосов
/ 25 июня 2018

Вот несколько основных HTML:

<p>Here is a reference: AB-AAA111</p>
<p>Here is a reference: AB-BBB222</p>
<p>Here is a reference: AB-CCC333, AB-DDD444</p>
<p>Here is a reference: AB-EEE555</p>

Как видите, каждый абзац содержит ссылку, начинающуюся с AB-

Конечная цель: Используя JS / jQuery внутри Geasemonkey, сделайте каждую ссылку AB кликабельной. Например:

<p>Here is a reference: <a href="localhost/AAA111"> AB-AAA111 </a> </p>

Я знаю, как использовать Regex для выбора слов, начинающихся с AB- / AB- \ w + / gi, и я знаю, как назначать переменные и заменять определенные части строк.

Что я не могу понять, так это как сшить все это вместе в этом случае?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Если вы действительно хотите сделать это простым регулярным выражением, вы можете использовать это:

document.body.innerHTML = document.body.innerHTML
  .replace(/\bAB-(\w+)/g, '<a href="http://localhost/$1">$&</a>');

Однако имейте в виду, что простая замена строк в документе HTML всегда очень плохая идея.Представьте, что может быть, например, какое-то имя класса, например <div class="AB-123" id="abc">.Такой подход сломал бы весь сайт.Не используйте его на сайтах, которые не находятся под вашим собственным контролем.

Вместо этого попробуйте анализировать только текстовые узлы.document дает вам метод evaluate для работы на определенных узлах.Вы также можете искать все текстовые узлы, например:

let nodes = document.evaluate('//text()[contains(.,"AB-")]', document,
  null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);

Это даст вам список узлов, которые могут быть повторены с помощью nodes.iterateNext().Недостатком является то, что синтаксический анализ для гипертекстов, таких как AB-<b>123</b>, становится очень трудным.

0 голосов
/ 25 июня 2018

Вам не нужно было бы использовать Regex

inputs = document.getElementsByTagName('p');

for(var i = 0; i < inputs.length; i++) {
  var p = inputs[i].innerHTML.substring(21);

  if(p.startsWith("AB")) {
    inputs[i].innerHTML = "<a href='*'>" + p;
    inputs[i].innerHTML += "</a>";
  }
}

Просто обрежьте начальную часть строки, которая не включает последовательность AB .... Все, что вам нужно сделать после этого, это проверить, начинается ли начало с AB, и изменить innerHTML этих элементов.

Если вы хотите использовать регулярные выражения для этой части, используйте что-то вроде этого

var re = new RegExp("^AB");
var match = re.test("AB");

Чтобы узнать, начинается ли он с этой последовательности.

Я уверен, что, возможно, есть более сложное решение для добавления тегов к этим элементам, но это просто и работает.

Надеюсь, это поможет, ура

...