这来自bobince对问题的相关回答:
你不想用正则表达式处理 HTML 是对的。分配大量 .html(); 也是一个坏消息;除了序列化和重新解析大量 HTML 的性能缺陷之外,您还会丢失不可序列化的数据,例如事件侦听器、表单数据和 JS 属性/引用。
这是一个简单的 JavaScript/DOM,它允许匹配 RegExp 模式。jQuery 在这里并没有真正给你太多帮助,因为选择器只能选择元素,而 ':contains' 选择器是递归的,所以对我们来说不太有用。
// Find text in descendents of an element, in reverse document order
// pattern must be a regexp with global flag
//
function findText(element, pattern, callback) {
for (var childi= element.childNodes.length; childi-->0;) {
var child= element.childNodes[childi];
if (child.nodeType==1) {
findText(child, pattern, callback);
} else if (child.nodeType==3) {
var matches= [];
var match;
while (match= pattern.exec(child.data))
matches.push(match);
for (var i= matches.length; i-->0;)
callback.call(window, child, matches[i]);
}
}
}
findText(document.body, /\bBuyNow\b/g, function(node, match) {
var span= document.createElement('span');
span.className= 'highlight';
node.splitText(match.index+6);
span.appendChild(node.splitText(match.index+3));
node.parentNode.insertBefore(span, node.nextSibling);
});