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

时间:2013-06-23 15:49:11

标签: javascript dom

当完成调用后,类会创建一组元素(一个表单),然后我想在调用它的脚本之后追加它们。

我一直在查看各种类似的问题,但最好的问题只是在页面上的最后一个脚本之后添加它。

它可以很好地用于头部而不是身体。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

好的,这是可怕的黑客。

HTML

<div>Stuff</div>
<script type="text/javascript">
    noop();
</script>
<div>More stuff</div>
<script type="text/javascript">
    new ExampleClass();
</script>
<div>More stuff</div>
<script type="text/javascript">
    noop();
</script>
<div>More stuff</div>

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

jsfiddle

答案 2 :(得分:1)

基于你的一些评论以及其他一些相似之处,我曾想过做这样的事情并且它似乎有效。

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

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