Замените буквы, используя jQuery - PullRequest
0 голосов
/ 29 октября 2019

Я делаю букмарклет, который заменит все буквы, такие как «R», другими буквами, такими как «W», или, возможно, заменит целые слова. Я попытался использовать следующий код, но он портит веб-сайт и показывает элементы в элементе.

javascript: $("body").text($("body").text().replace("r", "w"));

Было бы решение для этого?

Для тех из вас,кому интересно, для чего я бы это использовал, я пытаюсь создать код, который бы перевернул это:

Здравствуйте, меня зовут Джонатан Грассвелл, и я хотел бы предложить новую идею длятрактор.

В это:

Hewwo, мое имя - Jonnyathyan Gwyassweww, и я хотел бы создать новую идею для этого.

В основном, "OWOfier". Кроме того, можно ли вставить случайный смайлик через 20% времени после периода?

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

ТЕЛО, если оно полно HTML. Ваша проблема прямо здесь $("body").text($, так как в .text( вы говорите: «Сделать тело таким текстом:» потеря всей разметки.
Вместо этого вы должны выполнять итерацию по каждому3 (Node.TEXT_NODE) или, скорее, с помощью TreeWalker API

const body = document.body; // Or whatever more specific element you desire
const repl = { // Your replacements:
  "l"   : "w",
  "L"   : "W",
  "r"   : "w",
  "R"   : "W",
  "\\." : ". :)" // Remember, escape RegExp special characters to treat them as literals
};

const treeWalker = document.createTreeWalker(body, NodeFilter.SHOW_TEXT);

while (treeWalker.nextNode()) {
  const Node = treeWalker.currentNode; // PS: Node.nodeType is always 3 
  Object.keys(repl).forEach(key => {
    Node.nodeValue = Node.nodeValue.replace(new RegExp(key, "g"), repl[key]);
  });
}
.hello, .ll {color: BURLYWOOD;} /* "l"s of "class" and "hello" will stay intact */
<h1 class="hello">Hello,</h1>
<p>
  my name is <b class="ll">Long Island</b>, 
  and I would like to propose a new idea. For a clock. LOL
</p>
0 голосов
/ 29 октября 2019

метод text() только возвращает текстовое содержимое тела.

попробуйте эту функцию, запустите эту функцию под консолью этой страницы, нажав F12, эту функцию пока замените «Jonathan» на «ABCDEFGHIJKLMN».

function replaceTextOfElement(element) {
  $(element).contents()
    .filter((_, child) => child.tagName !== 'SCRIPT' && child.tagName !== 'STYLE' && child.tagName !== 'IFRAME')
    .each((_, child) => {
      if(child.nodeType === Node.TEXT_NODE) {
        child.data = child.data.replace('Jonathan', 'ABCDEFGHIJKLMN');
      } else {
        replaceTextOfElement(child);
      }
    });
}
replaceTextOfElement($('body'));
...