繁体   English   中英

javascript中没有href的字符串替换

[英]string replace without href in javascript

<html>
<head>
<title>Test</title>

</head>
<body>
<a href="hello.html">hello</a>
<script>
var str=document.body.innerHTML;
document.body.innerHTML=str.replace(/hello/g, "hi");</script>
</body>

</html>

在此代码中,hello.html和hello将更改hi.html和hi。 我不想替换href =“”。 怎么写正则表达式呢?

以下正则表达式替换将完成您想要的操作:

<script>
var str=document.body.innerHTML;
document.body.innerHTML=str.replace(/(>[^<]*)hello/g, "\1hi");
</script>

但是我认为它仍然很脆弱,用.innerHTML替换正则表达式的任何解决方案都将是...请记住,在尝试解决涉及html / xml解析的问题时,正则表达式始终是一个棘手的解决方案。

您需要什么呢? 当我说要替换文档的所有文本内容时,我是否猜对了?

在这种情况下,我建议从DOM获取所有内容节点的列表(有关方法的两种方法,请参阅此问题的可接受答案,一种使用jQuery,另一种不使用)。

然后,您可以使用该函数来更新每个文本节点的内容:

var textNodes = getTextNodesIn(el);
for (var i = 0; i < textNodes.length; i += 1) {
    textNodes[i].innerHTML = textNodes[i].innerHTML.replace(/hello/g, "hi");
}

这将使所有HTML属性不受影响。 如果还要调整它们(当然,任何href属性除外),则可以扩展getTextNodes函数以在返回的节点列表中包括属性( href属性除外)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM