0

在某些情况下,我可以使用 appendChild() 添加到 div,但在其他情况下它不起作用,我试图了解原因:

作品:我有其他代码示例,其中类似以下代码的内容可以正常工作:

function fnAppend(){
   var oNewNode = document.createElement("LI");
   oList.appendChild(oNewNode);
   oNewNode.innerText="List node 5";
}

不起作用:我知道这是一个完全不同的例子,但我认为差异是微妙的。我正在从我正在从事的现有项目中提取此代码,因此无论如何我都无法更改FieldSet 函数,而是试图了解如何使其工作。

<html>
    <head>
        <script type="text/javascript">     
        function Fieldset() {

            this.id = "";
            this.content = document.createElement("DIV");
            this.content.id = "content";
            this.title = "Title";

            this.getFieldset = function() {
                var div = document.createElement("DIV");
                div.id = this.id;
                var span = document.createElement("SPAN");
                //var fieldset = document.createElement("DIV");
                //fieldset.id = "fieldset";
                var header = document.createElement("DIV");
                header.id = "header";
                span.appendChild(document.createTextNode(this.title));
                header.appendChild(span);
                div.appendChild(header);
                div.appendChild(this.content);
                //div.appendChild(fieldset);

                return div;
            }
        }

        var fieldset = new Fieldset();
        fieldset.id = "newid";
        fieldset.title = "new title";

        org_div1.appendChild(fieldset.getFieldset());

        </script>
    </head>
    <body onload="fieldset()">
        <div id='org_div1'> The text above has been created dynamically.</div>
    </body>
</html>
4

1 回答 1

0

问题出在包含onload="fieldset()". fieldset是对象,不是函数,所以不能直接执行。

您可以通过将要运行的代码包装在函数中来获得目标,如下所示:

function createFieldset () {
    var fieldset = new Fieldset();
    fieldset.id = "newid";
    fieldset.title = "new title";

    org_div1.appendChild(fieldset.getFieldset());
}

然后,从 body 标签执行这个函数,如下所示:

<body onload="createFieldset()">

需要提到两点:

  1. 正如 Steve H. 所提到的,您应该在使用 org_div1 之前对其进行初始化。在所有浏览器中,依赖通过具有该 ID 的全局变量可访问的元素并不是 100% 可靠的
  2. 您的代码在静态内容之前插入新内容,而不是之后。你想使用insertBefore

鉴于这两点,我会将脚本的最后一行替换为:

var org_div1 = document.getElementById("org_div1");
org_div1.parentNode.insertBefore(fieldset.getFieldset(), org_div1);
于 2012-06-15T02:21:28.700 回答