2011-09-17 61 views
2

我是新來的JavaScript,但我發現了一個「意外的標記非法」這一行代碼錯誤意外的標記非法錯誤:的Javascript:與使用appendChild()

switch (city) { 
    case "london": 
     var newdiv = document.createElement('<div id="london" class="option-area"><label class="city">From London to…?</label> 
       <select class="city"> 
        <option></option> 
        <option>1</option> 
        <option>2</option> 
        <option>3</option> 
       </select><br /></div>'); 

     document.all.bookingform.appendChild(newdiv); 
     break; 
} 

這可能是一個非常愚蠢的錯誤,但我已經嘗試了幾個小時才能使這個塊工作。請幫忙!

+1

https://developer.mozilla.org/en/document.createElement - 注意它使用document.createElement(「div」); – 2011-09-17 19:20:23

回答

5

有代碼中的幾個錯誤後更改HTML吧:

1)document.createElement() function接受一個參數作爲元素名稱,而不是HTML/XML片段來解析和構建DOM樹。然而,你chould通過建立一個匿名的包裝元素,並設置其內部HTML,則追加了第一個孩子到目標元素,例如實現自己的目標:

var wrapperDiv = document.createElement("div"); 
wrapperDiv.innerHTML = '<div id="london" class="option-area"><label...'; 
document.all.bookingform.appendChild(wrapperDiv.firstChild); 

2)字符串不能跨越多行,但你可以建立一個多行字符串是這樣的:

var str = '<div id="london" class="option-area">' + 
      ' <label class="city">From London to…?</label>' + 
      ' <select class="city">' + // ... 
      '</div>'; 

如果你確實想在字符串中換行,你可以在一個字符串,如'Hello\nnewline!'使用換行符轉義序列(\n)。

[編輯]

當然,如果你只是想在文檔主體已經追加到HTML元素你這樣做:

var mydiv = document.getElementById('mydiv'); 
if (mydiv) { 
    mydiv.innerHTML += '<div class="newdiv">' + 
        ' New child will be appended...' + 
        '</div>'; 
} 

不過請注意,有怪癖在修改上述表單等各種瀏覽器中;考慮使用JavaScript庫,如jQuery,ExtJS或Prototype.js。

+0

這可以用文檔片段更直接的方式嗎? – loganfsmyth

2

document.createElement用於創建一個元素 - 如document.createElement('div'),因此不允許傳遞HTML。你可以創建元素,然後用ref_to_the_div.innerHTML = "<some html="goes here" />"