В настоящее время вы делаете это подверженным ошибкам способом.
Ошибка подвержена, потому что вы потеряете обработчики событий, а также замените вещи, которые вы не можете заменить. Что если поисковый термин был 'a'
? Хотели бы вы, чтобы все элементы a
превратились в строку замены?
Кроме того, вы без необходимости сериализуете HTML-код из DOM, который необходимо повторно проанализировать при повторной установке.
Правильный способ сделать это - перебирать только текстовые узлы.
var replaceText = function replaceText(element, search, replace) {
var nodes = element.childNodes;
for (var i = 0, length = nodes.length; i < length; i++) {
var node = nodes[i];
if (node.childNodes.length) {
replaceText(node, search, replace);
continue;
}
if (node.nodeType != 3) {
continue;
}
node.data = node.data.replace(new RegExp(search, 'g'), replace);
}
}
jsFiddle .