2011-09-17 48 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" />"

相关问题