Есть ли эквивалент для string.find () в оконных объектах?

Итак, я знаю window.find (), нестандартный объект js, который находит строку на странице, возвращает true, если найден, и false, если нет. Есть ли что-то похожее на string.replace (), но есть ли объект окна (например, window.replace ()), который заменит все параллельные элементы на что-то еще (например, заменит все «Hi» на «Hello»)?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не думаю, что есть, но писать легче, чем вы думаете. Вы просто идете по DOM в поисках текстовых узлов и используете replace на их nodeValue:

function replaceAll(element, regex, replacement) {
    for (var child = element.firstChild;
         child;
         child = child.nextSibling) {
        if (child.nodeType === 3) { // Text
            child.nodeValue = child.nodeValue.replace(regex, replacement);
        } else if (child.nodeType === 1) { // Element
            replaceAll(child, regex, replacement);
        }
    }
}

Там я использовал регулярное выражение (которое должно иметь флаг g), чтобы получить «глобальное» поведение при замене и для гибкости.

Живой пример:

function replaceAll(element, regex, replacement) {
    for (var child = element.firstChild;
         child;
         child = child.nextSibling) {
        if (child.nodeType === 3) { // Text
            child.nodeValue = child.nodeValue.replace(regex, replacement);
        } else if (child.nodeType === 1) { // Element
            replaceAll(child, regex, replacement);
        }
    }
}

setTimeout(function() {
    replaceAll(document.body, /one/g, "two");
}, 800);
<div>
  Here's one.
  <p>And here's one.</p>
  <p>And here's <strong>one</strong>
</div>

Если вы хотите использовать простую строку вместо регулярного выражения, просто используйте escape-функцию регулярного выражения (например, те, что указаны в ответах на этот вопрос, и создайте свое регулярное выражение следующим образом:

var regex = new RegExp(yourEscapeFunction(simpleString), "g");

Случай, когда это не обрабатывается, - это когда целевая строка пересекает текстовые узлы, например:

<span>ex<span>ample</span></span>

Используя указанную выше функцию поиска "example", вы его не найдете. Я оставляю это в качестве упражнения, чтобы читатель при желании разобрался с этим случаем ... :-)

Спасибо. Я не видел этого до сих пор.

A coder that need help 30.12.2018 12:57

Другие вопросы по теме