替换html5 <script> </script>中的字符串

时间:2012-10-15 16:59:45

标签: javascript html5

就像标题中提到的那样,我愿意替换脚本标签<script>中的字符串。我要替换的是字符串// WRITE by else else。

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

所以我自动尝试了:

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

但我收到以下错误:未捕获TypeError:对象#<HTMLScriptElement>没有方法'replace'。 我明白,与<div>不同,<script>不使用该方法。有同等的方法吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

“getElementById”返回的对象是DOM Element,因此您可以通过分配到innerHTML attribute来更改其内容:

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

请注意您的替换令牌 - 您的示例“script”标记使用文字字符串“// Write”,而您尝试的正则表达式将查找“// WRITE”,这不存在。如果要使其工作,则必须使用相同的文字字符串.j

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

答案 1 :(得分:0)

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

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

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

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);