Не используйте innerHTML с регулярным выражением, оно почти наверняка завершится неудачей для нетривиального содержимого. Кроме того, все еще существуют различия в том, как браузеры генерируют его из живого DOM. Замена innerHTML также удалит любые прослушиватели событий, добавленные как свойства элемента (например, element.onclick = fn
).
Лучше всего, если у вас есть строка, заключенная в элемент с атрибутом или свойством, по которому вы можете выполнять поиск (идентификатор, класс и т. Д.), Но при этом поиск текстовых узлов является лучшим подходом.
Редактировать
Попытка использования функции выбора текста общего назначения для документа HTML может привести к очень сложному алгоритму, поскольку строка может быть частью сложной структуры, например ::
<h1>Some <span class="foo"><em>s</em>pecial</span> heading</h1>
Поиск строки «специальный заголовок» сложен, так как разбит на 2 элемента. Обтекание его другим элементом (скажем, для выделения) также не является тривиальным, поскольку получающаяся структура DOM должна быть допустимой. Например, текст, соответствующий «некоторому особенному» в приведенном выше, может быть заключен в span, но не в div.
Любая такая функция должна сопровождаться документацией с указанием ее ограничений и наиболее подходящего использования.