Я делаю букмарклет, который заменяет все буквы, например «R», на другие буквы, например «W», или, возможно, заменяет целые слова. Я пробовал использовать следующий код, но он портит сайт и показывает элементы в элементе.
javascript: $("body").text($("body").text().replace("r", "w"));
Будет ли решение для этого?
Для тех из вас, кто интересуется, для чего я бы это использовал, я пытаюсь создать код, который бы изменил это:
Здравствуйте, меня зовут Джонатан Грассвелл, и я хотел бы предложить новую идею для трактора.
В это:
Hewwo, мое имя - Jonnyathyan Gwyassweww, и я хотел бы создать новую идею для себя.
В основном, "OWOfier". Кроме того, можно ли вставить случайный смайлик через 20% времени после периода?
2 ответа
ТЕЛО, если полно HTML. Ваша проблема прямо здесь $("body").text($
, поскольку в .text(
вы говорите: "Сделать тело таким:" , теряя всю разметку.
Вместо этого вам следует перебирать каждый NodeType, который является 3
(Node.TEXT_NODE
) или, скорее, используя API TreeWalker
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>
Метод text()
возвращает только текстовое содержимое тела.
Попробуйте эту функцию, запустите эту функцию под консолью этой страницы, нажав F12, эту функцию пока замените «Джонатан» на «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'));
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.