gpt4 book ai didi

javascript - 使用 JavaScript 清理全局搜索和替换?

转载 作者:行者123 更新时间:2023-11-30 07:29:54 25 4
gpt4 key购买 nike

我正在编写一个小书市以将当前页面中的所有设计转换为另一个。我严重依赖正则表达式,并使用 Jquery 来简化工作。

现在,我像一头大肥 pig 那样做,更换了所有的 body :

$("body").children().each(function(){
var $this = $(this);
var h = $.html().replace(/eyes_hurting_regexp/g, "my_super_result");
$this.html(h);
});

它在静态页面上工作正常,但是如果涉及到js事件,那就是天启。

我能想到的唯一方法是遍历所有节点,检查它是否仅包含文本,然后替换文本。在大量 HTML 标记上,我担心性能。

有什么想法吗?

最佳答案

不幸的是,逐步遍历每个文本节点是唯一可靠的方法。这在过去对我有用:( demo )

function findAndReplace(searchText, replacement, searchNode) {
if (!searchText || typeof replacement === 'undefined') {
// Throw error here if you want...
return;
}
var regex = typeof searchText === 'string' ?
new RegExp(searchText, 'g') : searchText,
childNodes = (searchNode || document.body).childNodes,
cnLength = childNodes.length,
excludes = 'html,head,style,title,link,meta,script,object,iframe';
while (cnLength--) {
var currentNode = childNodes[cnLength];
if (currentNode.nodeType === 1 &&
(excludes + ',').indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
arguments.callee(searchText, replacement, currentNode);
}
if (currentNode.nodeType !== 3 || !regex.test(currentNode.data) ) {
continue;
}
var parent = currentNode.parentNode,
frag = (function(){
var html = currentNode.data.replace(regex, replacement),
wrap = document.createElement('div'),
frag = document.createDocumentFragment();
wrap.innerHTML = html;
while (wrap.firstChild) {
frag.appendChild(wrap.firstChild);
}
return frag;
})();
parent.insertBefore(frag, currentNode);
parent.removeChild(currentNode);
}
}

关于javascript - 使用 JavaScript 清理全局搜索和替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/977239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com