<script type="text/javascript">
var haystackText = document.getElementById("navigation").innerHTML;
var matchText = '<a href="http://mydomain.co/?feed=rss">Subscribe to RSS</a>';
var replacementText = '<ul><li>Some Other Thing Here</li></ul>';
var replaced = haystackText.replace(matchText, replacementText);
document.getElementById("navigation").innerHTML = replaced;
</script>
我正在尝试将一串 HTML 代码替换为其他内容。我无法直接编辑代码,所以我使用 Javascript 来更改代码。
如果我在常规字符串上使用上述方法匹配文本,例如只是“订阅RSS”,我可以很好地替换它。但是,一旦我尝试替换 HTML 字符串,代码就会“失败”。
此外,如果我要替换的 HTML 包含换行符怎么办?我将如何搜索它?
<ul><li>\n</li></ul>
??
我应该用什么或做什么来代替这个?或者我只是错过了一小步?我确实在这里搜索过,但也许我的搜索关键字并不是找到适合我情况的结果的最佳选择......
编辑:要提一下,我在页面的页脚中编写了这个脚本,在我希望替换的文本之后,所以在我想要覆盖的内容出现之前编写脚本不是问题。 :)
最佳答案
当前您正在使用 String.replace(substring, replacement)
它将搜索 substring
的精确匹配并将其替换为 replacement
例如
"Hello world".replace("world", "Kojichan") => "Hello Kojichan"
精确匹配的问题在于它不允许除精确匹配之外的任何其他内容。
要解决这个问题,您将不得不开始使用正则表达式。使用正则表达式时你必须注意
?
、/
、\
等需要转义的特殊字符\?
、\/
,\\
- 多行模式/regexp/m
- 如果要替换表达式/regexp/g 的多个实例,则进行全局匹配
- 允许多个空白实例的闭包
\s+
用于 [1..n] 空白字符和\s*
用于 [0..n] 白色-空格字符。
要使用正则表达式而不是子字符串匹配,您只需将 String.replace("substring", "replacement")
更改为 String.replace(/regexp/, "replacement")
例如
"Hello world".replace(/world/, "Kojichan") => "Hello Kojichan"
关于javascript - getElementById 替换 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6772125/