替换 HTML5 <script>中的字符串



就像标题中提到的那样,我愿意替换脚本标记<script>中的字符串。我想用其他东西替换字符串//WRITE。

<script name="general" id="general" type="text/javascript">
some code
//Write
</script>

所以我自动尝试了:

ch="new string";
document.getElementById("general").replace('// WRITE',ch);

但我得到了以下错误:未捕获的类型错误:对象#<HTMLScriptElement>没有方法"replace"。所以我理解<div>不同,<script>没有使用那种方法。有等效的方法吗?提前谢谢。

"getElementById"返回的对象是DOM元素,因此您可以通过分配给innerHTML属性来更改其内容:

var general = document.getElementById("general");
general.innerHTML = general.innerHTML.replace('//WRITE', ch);

请小心您的替换标记-您的示例"script"标记使用文字字符串"//Write",而您尝试的正则表达式将查找不存在的"//Write"。如果你想让它工作,你必须使用相同的文字字符串。j

[Edit]请注意,当浏览器加载页面时,根据示例定义的脚本会立即运行,因此尝试使用其他脚本修改它们可能不会产生任何影响。此外,如果您试图修改稍后在页面中出现的脚本,则此策略将不起作用,因为浏览器尚未加载该脚本,因此不会有具有目标id的元素。一种可能性是修改已定义的函数,以便稍后调用,但这也可能不起作用。在JavaScript块中包含动态内容的更好策略是让JS本身在DOM中查找信息,而不是相反。

根据上面的注释,目的是在运行时更改脚本。

请注意,一旦脚本运行,就无法"取消运行"它。因此,您必须小心,并可能手动恢复效果。

您可以创建第二个脚本并运行:

var oldScript = document.getElementById("general");
var newScript = document.createElement('script');
newScript.innerHTML = oldScript.innerHTML.replace('// Write', '// whatever');
// here comes the crucial part:
// insert the new script into the head element; this triggers execution
var head = document.getElementsByTagName('head')[0];
headhead.insertBefore(script, head.firstChild);

最新更新