Javascript 在发出调用的脚本的节点后追加子节点

Javascript 在发出调用的脚本的节点后追加子节点,javascript,dom,Javascript,Dom,当下面的调用完成时,该类创建一组元素(一个表单),然后我想在调用它的脚本之后添加它们 我一直在研究各种类似的问题,但其中最好的只是在页面上最后一个脚本之后附加它 它可以很好地作用于头部,但不能作用于身体 <script type="text/javascript"> new exampleClass(); </script> 新示例类(); 您应该具有某种类型的唯一标识,以便在脚本之后查找和附加元素。如果您有id,可以使用document.getElementById

当下面的调用完成时,该类创建一组元素(一个表单),然后我想在调用它的脚本之后添加它们

我一直在研究各种类似的问题,但其中最好的只是在页面上最后一个脚本之后附加它

它可以很好地作用于头部,但不能作用于身体

<script type="text/javascript">
new exampleClass();
</script>

新示例类();

您应该具有某种类型的唯一标识,以便在脚本之后查找和附加元素。如果您有id,可以使用document.getElementById(),也可以使用document.getElementsByTagName(“脚本”)获取脚本元素并获取所需的脚本元素,然后使用appendChild()

您应该具有某种类型的唯一标识,以便在脚本之后查找和追加元素。如果您有id,可以使用document.getElementById(),也可以使用document.getElementsByTagName(“脚本”)获取脚本元素并获取所需的脚本元素,然后使用appendChild()

好的,下面是提到的可怕的攻击

HTML

东西
noop();
更多的东西
新示例类();
更多的东西
noop();
更多的东西
Javascript

function noop() {}

function appendAfter(node, newNode) {
    if (node.nextSibling) {
        node.parentNode.insertBefore(newNode, node.nextSibling);
    } else {
        node.parentNode.appendChild(newNode);
    }
}

function ExampleClass() {
    window.addEventListener("load", function () {
        var scripts = document.getElementsByTagName("script"),
            div = document.createElement("div"),
            length = scripts.length,
            i = 0,
            script;

        div.appendChild(document.createTextNode("Inserted"));
        while (i < length) {
            script = scripts[i];

            if (script.firstChild && script.firstChild.nodeValue.indexOf("ExampleClass()") !== -1) {
                appendAfter(script, div);
            }

            i += 1;
        }
    }, false);
}
函数noop(){}
函数appendAfter(节点,新节点){
if(node.nextSibling){
node.parentNode.insertBefore(newNode,node.nextSibling);
}否则{
node.parentNode.appendChild(newNode);
}
}
函数ExampleClass(){
addEventListener(“加载”,函数(){
var scripts=document.getElementsByTagName(“脚本”),
div=document.createElement(“div”),
length=scripts.length,
i=0,
剧本
div.appendChild(document.createTextNode(“插入”);
while(i

好的,这里是提到的可怕的黑客

HTML

东西
noop();
更多的东西
新示例类();
更多的东西
noop();
更多的东西
Javascript

function noop() {}

function appendAfter(node, newNode) {
    if (node.nextSibling) {
        node.parentNode.insertBefore(newNode, node.nextSibling);
    } else {
        node.parentNode.appendChild(newNode);
    }
}

function ExampleClass() {
    window.addEventListener("load", function () {
        var scripts = document.getElementsByTagName("script"),
            div = document.createElement("div"),
            length = scripts.length,
            i = 0,
            script;

        div.appendChild(document.createTextNode("Inserted"));
        while (i < length) {
            script = scripts[i];

            if (script.firstChild && script.firstChild.nodeValue.indexOf("ExampleClass()") !== -1) {
                appendAfter(script, div);
            }

            i += 1;
        }
    }, false);
}
函数noop(){}
函数appendAfter(节点,新节点){
if(node.nextSibling){
node.parentNode.insertBefore(newNode,node.nextSibling);
}否则{
node.parentNode.appendChild(newNode);
}
}
函数ExampleClass(){
addEventListener(“加载”,函数(){
var scripts=document.getElementsByTagName(“脚本”),
div=document.createElement(“div”),
length=scripts.length,
i=0,
剧本
div.appendChild(document.createTextNode(“插入”);
while(i

上,根据你的一些评论和其他类似的评论,我曾想过做类似的事情,而且似乎奏效了

// Generate random string we can use as element id
var rs = Math.random().toString(36).substring(2);;
// Document write an empty div with the above string as id
document.write('<div id="' + rs + '"></div>');
// Get the element to use for append
var ip = document.getElementById(rs);
//生成可以用作元素id的随机字符串
var rs=Math.random().toString(36).子字符串(2);;
//文档使用上面的字符串作为id写入一个空div
文件。写(“”);
//获取用于append的元素
var ip=document.getElementById(rs);

如果您认为它可能有致命的缺陷,请随时发表评论。

基于您的一些评论和其他类似的评论,我曾想过做类似的事情,而且似乎有效

// Generate random string we can use as element id
var rs = Math.random().toString(36).substring(2);;
// Document write an empty div with the above string as id
document.write('<div id="' + rs + '"></div>');
// Get the element to use for append
var ip = document.getElementById(rs);
//生成可以用作元素id的随机字符串
var rs=Math.random().toString(36).子字符串(2);;
//文档使用上面的字符串作为id写入一个空div
文件。写(“”);
//获取用于append的元素
var ip=document.getElementById(rs);

如果您认为它可能有致命缺陷,请随时发表评论。

我同意,我建议在脚本标签上使用ID。不能保证最后一个脚本标记是当前的(请参阅),我同意,我建议在脚本标记上使用ID。无法保证最后一个脚本标记是当前的(请参阅)为什么必须直接在调用之后?因为我正在插入HTML。上面的代码是在应该注入HTML的地方添加的。为什么不使用一个隐藏的div或带有标识插入位置的ID的东西呢?这似乎是一种奇怪的方式,因为我只能控制JavaScript中的代码。标签不在我的控制范围内,没有id或任何东西。此外,脚本需要是通用的。因此,从js文件内部,我需要插入,就像我要做document.write一样,但使用append,因为我的html不是字符串,而是对象。我担心你可能会不走运。为什么一定要在电话后直接发送呢?因为我正在插入HTML。上面的代码是在应该注入HTML的地方添加的。为什么不使用一个隐藏的div或带有标识插入位置的ID的东西呢?这似乎是一种奇怪的方式,因为我只能控制JavaScript中的代码。标签不在我的控制范围内,没有id或任何东西。此外,脚本需要是通用的。因此,从js文件内部,我需要插入,就像我要做document.write一样,但使用append,因为我的html不是字符串,而是对象。我担心你可能会走运。在我看来,这也很不礼貌,但如果你真的在HTML中没有发言权,你就没有那么多选择。在我看来,这也很不礼貌,但如果你真的在HTML中没有发言权,你就没有那么多选择。