2012-06-14 40 views
0

在某些情況下,它可以讓我使用的appendChild()添加到一個div,但在其他情況下,它不工作,我試圖理解爲什麼:爲什麼我不能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> 
+0

oNewNode.innerText可能應該oNewNode.appendChild(document.createTextNode( 「List node 5」)) – kennebec

+0

你在哪裏初始化「org_div1」? –

+0

爲什麼我需要初始化org_div1,如果它只是一個div標籤?我可能必須這樣做,我只是不明白! – fakeguybrushthreepwood

回答

0

問題是在包含onload="fieldset()"的行中。 fieldset是一個對象,而不是一個函數,所以你不能直接執行它。

你可以得到你的目標是什麼由包裝要在功能上運行的代碼,如:

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

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

然後,從身體標記執行此功能,像這樣:

<body onload="createFieldset()"> 

兩點應該提到:

  1. 正如史蒂夫H.提到的,你應該使用它之前初始化org_div1。依靠可通過全局變量訪問的元素,該ID在所有瀏覽器中都不是100%可靠
  2. 您的代碼將新內容插入靜態內容之前,而不是之後。你想用insertBefore

在這兩個點的光,我將與此更換你的腳本的最後一行:

var org_div1 = document.getElementById("org_div1"); 
org_div1.parentNode.insertBefore(fieldset.getFieldset(), org_div1); 
相關問題