2012-04-24 53 views
2

我的代碼是:IE6/7/8中的innerHTML問題?

<body> 
    <p id="tit"></p> 
    <script type="text/javascript"> 
     try { 
      document.getElementById('tit').innerHTML = "<div>test</div>"; 
     } 
     catch(e) { 
      alert(e) 
     } 
    </script> 
</body> 

在IE6/7/8,爲什麼alert [object Error]

回答

1

這是設計。

的元件<p>應該只包含內聯元素,從HTML specs

<!ELEMENT P - O (%inline;)* -- paragraph --> 

可能並不是那樣清楚,但它意味着,<p>不能包含分組元素。現在,在規格<div>我們可以讀到:

div和span元素,連同id和class屬性 ,提供了一個通用的機制,用於將結構 文件。這些元素將內容定義爲內聯(SPAN)或塊級(DIV),但不會對 內容施加其他表示形式。

<p>元件並不是唯一的一個可以僅包含內聯元素,標頭(<h1><h2>,...)例如共享相同的行爲。

許多瀏覽器允許畸形的HTML通過innerHTML財產插入其中,這奇怪行爲似乎隻影響IE瀏覽器。較新的版本(目前的IE 9)支持通過腳本插入錯誤的HTML代碼,以便您的HTML片段不會導致錯誤(即使它仍然不是有效的HTML)。

我的建議是隻插入有效的HTML:
你可以從<p>容器元素改爲<div>
- 或 -
你可以從<div>插入的元素變爲<span>

0

e是一個對象。

alert(e.message); 
+0

這應該是評論,而不是答案! – 2012-04-24 12:00:49

0

這似乎是p元素,如果我用一個div它爲我工作:

<div id="tit"></div> 
<script type="text/javascript"> 
    try { 
     document.getElementById('tit').innerHTML = "<div>test</div>"; 
    } 
    catch (e) { 
     alert(e.message); 
    } 
</script> 

相反,它不與p標籤。你也可以使用jQuery和它的.append(),因爲它工作得很好。