Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用纯JavaScript在html头部插入新标记_Javascript_Html - Fatal编程技术网

使用纯JavaScript在html头部插入新标记

使用纯JavaScript在html头部插入新标记,javascript,html,Javascript,Html,我需要在html头部插入新标记。不是在文档中,而是在包含html的字符串中。所以正则表达式是唯一的方法 <head> <title>Html</title> </head> Html 然后得到这样的结果: <head> <title>Html</title> <script src="some_path.js"></script> </head> Html 还有更多

我需要在html头部插入新标记。不是在文档中,而是在包含html的字符串中。所以正则表达式是唯一的方法

<head>
<title>Html</title>
</head>

Html
然后得到这样的结果:

<head>
<title>Html</title>
<script src="some_path.js"></script>
</head>

Html
还有更多:

<head>
<title>Html</title>
<script src="some_path.js"></script>
<script src="some_path_2.js"></script>
</head>

Html

这是可能的。只需获取
元素并像往常一样向其添加子元素:

document.getElementsByTagName("head")[0].appendChild(whatever);
如需了解更多有关如何使用“Javascript DOM”的信息,请使用谷歌搜索

function injectScript (id, src, async) {
    var js,
    fjs = document.getElementsByTagName("head")[0];

    if (document.getElementById(id))
        return;

    js = document.createElement("script");
    js.id = id;
    js.src = src;
    js.type = 'text/javascript';

    if (async) {
        js.async = true;
    }

    fjs.appendChild(js, fjs);
}

将防止双重注入并支持异步脚本

如果HTML只能作为字符串使用,而不能作为DOM文档使用,那么可以在head-close标记之前进行简单的插入,而无需使用正则表达式。以下代码使用了拼接方法。它可以是一个函数,而不是原型,并且为了我们的目的,删除了第二个参数:

String.prototype.splice = function( idx, rem, s ) {
    return (this.slice(0,idx) + s + this.slice(idx + Math.abs(rem)));
};

var insertTag = function(newTag, html) {
  var end = html.indexOf('</head>');
  return html.splice(end, 0, newTag);
}
String.prototype.splice=函数(idx、rem、s){
return(this.slice(0,idx)+s+this.slice(idx+Math.abs(rem));
};
var insertTag=函数(newTag,html){
var end=html.indexOf(“”);
返回html.splice(end,0,newTag);
}
所以如果你有

var doc = '<head><title>Html</title></head>';
var doc='Html';
你跑了

var doc = insertTag('<script src="some_path.js"></script>', doc);
var doc=insertTag(“”,doc);
你会得到

<head><title>Html</title><script src="some_path.js"></script></head>
Html
该功能很简单,不检查是否存在头部闭合标签,也不检查可能需要采取的任何其他安全问题。它将使用换行符,并且只是作为如何避免DOM(每个问题)和正则表达式(每个保存您的理智)的一般概念给出


但是,如果您有可用的DOM,请使用它。

是一个标签,就像页面中的任何其他标签一样……不需要正则表达式。您可以附加到它,因为这不是DOM解析,而是字符串解析,如何避免正则表达式,而是解析出字符串?一个简单的标记器会带来奇迹。您无法访问DOM的上下文是什么?到目前为止最好的解决方案。var wholeHtml=“”;替换(/()()/g,$1$2')@AntonAleksandrovichTrofimenk——这真的不是最好的解决方案,它依赖于在其他标记之后立即有一个元标记,它取代了完全不必要的整个反向引用。我想看看Michael在OP中的解决方案“不在文档[DOM]中,在包含html的字符串中”。考虑到问题的范围非常有限,而且(可怕的)不使用DOM的要求,这可能是最简单的方法。我甚至可能使用术语“哑”而不是简单。但它确实有效。对于术语“工作”的某些有限定义
(function(){
  var newscript = document.createElement('script');
     newscript.type = 'text/javascript';
     newscript.async = true;
     newscript.src = 'some_path.js';
  (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(newscript);
})();