2

我的代码是:

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

alert [object Error]在 IE6/7/8 中,为什么?

4

3 回答 3

1

这(是)设计使然。

一个元素<p>应该只包含内联元素,来自HTML 规范

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

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

DIV 和 SPAN 元素与 id 和 class 属性一起,提供了一种向文档添加结构的通用机制。这些元素将内容定义为内联 (SPAN) 或块级 (DIV),但不会对内容强加其他表现形式。

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

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

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

于 2012-04-24T12:30:27.493 回答
0

e是一个对象。

alert( e.message);
于 2012-04-24T12:00:12.890 回答
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(),因为它运行良好。

于 2012-04-24T12:05:58.617 回答