IE6 / 7/8中的innerHTML问题?

时间:2012-04-24 11:57:09

标签: html internet-explorer-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],为什么?

3 个答案:

答案 0 :(得分:1)

这是(设计)。

元素<p>应仅包含来自HTML specs的内联元素:

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

可能不太清楚,但这意味着<p>不能包含分组元素。现在在<div>规范中我们可以阅读:

  

DIV和SPAN元素,与id和class一起使用   属性,提供添加结构的通用机制   文档。这些元素定义内联(SPAN)或   块级(DIV),但没有其他表现的成语   内容。

<p>元素不是唯一一个只能包含内联元素的元素,标题(<h1><h2>,...)例如共享相同的行为。

许多浏览器都允许通过innerHTML属性插入格式错误的HTML ,因此这种奇怪的行为似乎只会影响IE。较新版本(此时为IE 9)支持通过脚本插入错误的HTML代码,因此您的HTML片段不会导致错误(即使它仍然是无效的HTML)。

我的建议是只插入有效的HTML:
您可以将容器元素从<p>更改为<div>
- 或 -
您可以将插入的元素从<div>更改为<span>

答案 1 :(得分:0)

e是一个对象。

alert( e.message);

答案 2 :(得分: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(),因为它运行得很好。