JavaScript在执行点插入元素

JavaScript在执行点插入元素,javascript,dom,object,insert,Javascript,Dom,Object,Insert,是否可以在执行标记时插入DOM HTML元素?与document.write()函数类似,该函数在执行时立即将文本插入DOM [更新] 是的!以下是我的想法: var injectElement = function (element) { //Function that generates random id var randomID = function () { var id = ''; var chars = 'ABCDEFGHIJKLMN

是否可以在执行
标记时插入DOM HTML元素?与
document.write()
函数类似,该函数在执行时立即将文本插入DOM

[更新]

是的!以下是我的想法:

var injectElement = function (element) {
    //Function that generates random id
    var randomID = function () {
        var id = '';
        var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        for( var i=0; i < 5; i++ )
           id += chars.charAt(Math.floor(Math.random() * chars.length));
       return id;
    };

    var id = randomID();

    //Adding placeholder element
    document.write('<div id="' + id + '"></div>');

    //Injecting new element instead of placeholder
    var placeholder = document.getElementById(id)
    placeholder.parentNode.replaceChild(element, placeholder);
};
var injectElement=函数(元素){
//生成随机id的函数
var randomID=函数(){
变量id=“”;
var chars='ABCDEFGHIjklmnopqrstuvxyzabCDEFGHIjklmnopqrstuvxyz012456789';
对于(变量i=0;i<5;i++)
id+=chars.charAt(Math.floor(Math.random()*chars.length));
返回id;
};
var id=randomID();
//添加占位符元素
文件。写(“”);
//注入新元素而不是占位符
变量占位符=document.getElementById(id)
placeholder.parentNode.replaceChild(元素,占位符);
};
是,这是可能的:

<script>
    var arrScripts = document.getElementsByTagName('script');
    var currScript = arrScripts[arrScripts.length - 1];

    var newNode = document.createElement('div');
    newNode.innerHTML = 'This is a DIV';

    currScript.parentNode.appendChild(newNode);

</script>

var arrScripts=document.getElementsByTagName('script');
var currScript=arrscript[arrscript.length-1];
var newNode=document.createElement('div');
newNode.innerHTML='这是一个DIV';
currScript.parentNode.appendChild(newNode);
此代码首先在文档中定位当前脚本块,然后在其后面附加DOM元素。

是,这是可能的:

<script>
    var arrScripts = document.getElementsByTagName('script');
    var currScript = arrScripts[arrScripts.length - 1];

    var newNode = document.createElement('div');
    newNode.innerHTML = 'This is a DIV';

    currScript.parentNode.appendChild(newNode);

</script>

var arrScripts=document.getElementsByTagName('script');
var currScript=arrscript[arrscript.length-1];
var newNode=document.createElement('div');
newNode.innerHTML='这是一个DIV';
currScript.parentNode.appendChild(newNode);

这段代码首先定位文档中的当前脚本块,然后在它后面附加DOM元素。

好的,所以我对这段代码进行了一些思考,我认为我已经创建了一种故障安全方法,可以在
标记之后将元素注入DOM,方法非常简单:

<script>
    injectElement(document.createElement('canvas'));
</script>

好的,我对此进行了一点思考,我认为我已经创建了一种故障安全的方法,在
标记之后将元素注入DOM,方法非常简单:

<script>
    injectElement(document.createElement('canvas'));
</script>

如果您的目标是IE,请使用document.currentScript并回退到document.scripts[document.scripts.length-1]

function writeHere(element)
{
 var sc = document.currentScript || document.scripts[document.scripts.length-1] ;  
 sc.parentNode.insertBefore(element, sc);
 // or in jquery $(sc).before($(element));
}
注意:我没有彻底测试
document.scripts[document.scripts.length-1]
,但在大多数情况下它应该可以工作(=如果您没有在其他脚本中手动创建脚本元素)。

这是对IE的修复,所以谁在乎呢:)

使用document.currentScript并回退到document.scripts[document.scripts.length-1],如果你是针对IE的

function writeHere(element)
{
 var sc = document.currentScript || document.scripts[document.scripts.length-1] ;  
 sc.parentNode.insertBefore(element, sc);
 // or in jquery $(sc).before($(element));
}
注意:我没有彻底测试
document.scripts[document.scripts.length-1]
,但在大多数情况下它应该可以工作(=如果您没有在其他脚本中手动创建脚本元素)。


这是IE的一个解决方案,谁在乎呢:)

你为什么要尝试实现什么?为什么不简单地在那里放置一个占位符(例如,一个空DIV)并在那里附加元素呢?所以你想做与
文档相同的事情。write
可以,但没有
文档。write
?@bfavaretto如果我将对象传递给
文档。write
会将其转换为字符串。我想在
@YuriyGalanter的位置插入html元素我想插入
canvas
元素而不必引用id。您只需将脚本放在像下面这样的文档体
game.createCanvas()这真的不是这样做的。您需要在主体中放置一个占位符元素,这是您可以通过ID找到的元素,然后使用运行在
或外部.js文件中的脚本将
元素附加到主体中。您为什么要尝试实现这一点?为什么不简单地在那里放置一个占位符(例如,一个空DIV)并在那里附加元素呢?所以你想做与
文档相同的事情。write
可以,但没有
文档。write
?@bfavaretto如果我将对象传递给
文档。write
会将其转换为字符串。我想在
@YuriyGalanter的位置插入html元素我想插入
canvas
元素而不必引用id。您只需将脚本放在像下面这样的文档体
game.createCanvas()这真的不是这样做的。您需要在主体中放置一个PlaceHolder元素,这是您可以通过ID找到的内容,然后使用在
或外部.js文件中运行的脚本将
元素附加到主体中。更安全的选择是使用
,然后通过id获取脚本元素。@bfavaretto完全同意,这就是我最初所做的。但是OP说他想做这个“不需要参考id”。@bfavaretto是的,这应该是我的退路。但知道这一点很有意思。还有其他方法可以识别当前脚本块(比如在块中放置唯一的字符串)。最好的方法就是使用
,然后通过id获取脚本元素。@bfavareto完全同意,这就是我最初所做的。但是OP说他想做这个“不需要参考id”。@bfavaretto是的,这应该是我的退路。但知道这一点很有意思。还有其他方法可以识别当前脚本块(比如在块中放置唯一的字符串)。什么最管用。