11

如何复制:

  1. 创建一个 html5 页面。

  2. 确保您已添加来自 remysharp.com/2009/01/07/html5-enabling-script/ 的脚本,以便 IE 会注意到这些标签。

  3. 创建硬编码<section id='anything'></section>标签。

  4. 使用 jQuery 1.3.2,附加另一个部分标签:$('#anything').append('<section id="whatever"></section>');到目前为止,一切都在所有浏览器中工作。

  5. 重复上一步。$('#whatever').append('<section id="fail"></section>');这就是 IE6/7 失败的地方。Firefox/Safari 将继续工作。

错误

错误弹出屏幕截图

想法

  • 可能是 IE6/7 无法处理 HTML5 部分标记。我这样说是因为当我将第 4 步从 更改<section>为 时<div>,IE6/7 将开始工作。

  • 如果我使用document.createElement()并创建我的新元素,它可以工作,但似乎 jQuery 的append()html5 元素有问题。

4

5 回答 5

18

该错误存在于 IE 的 innerHTML 实现中——由于某种原因,它不喜欢通过 innerHTML 插入的“未知”元素——而 DOM 脚本很好。

jQuery 使用创建一个保持 div,然后通过 innerHTML 放入要附加的标记。IE 现在将未知元素视为两个新的损坏元素,即被<article>content</article>视为ARTICLE, #text, /ARTICLE, 由 innerHTML borking 引起。

这是一个示例,在 IE 中查看它,您会看到 innerHTML 插入方法错误地报告了 3 个插入到 div 中的节点:http: //jsbin.com/olizu

没有 IE 的屏幕截图:http: //leftlogic.litmusapp.com/pub/2c3ea3e

于 2009-10-20T13:19:36.920 回答
6

我也遇到过这个问题。解决方案似乎是在已附加到文档的元素上使用 innerHTML,然后提取创建的节点。我创建了这个 li'l 函数来做到这一点:

http://jdbartlett.github.com/innershiv/

于 2010-04-04T21:57:21.997 回答
4

每个人都在讽刺那里保持你的马匹。查看http://html5shiv.googlecode.com/svn/trunk/html5.js,html5 shiv 确实成功地诱使 IE6/7 执行 createElement()。

在上面的 karbassi 的例子中,人们希望 IE6/7 会首先关注 html5 shiv,然后每次都按预期执行 jQuery append()。附加到附加时,它显然不会按该顺序执行操作。这很方便知道。

于 2009-07-28T17:45:19.730 回答
1

HTML5 shiv 是否处理innerHTML?IE 的处理方式很可能innerHTML与 DOM 方法不同createElement,并且阅读 jQuery 源代码(我推荐),似乎您的代码正在触发innerHTML而不是 DOM 方法。您可以尝试重写<section id="fail"></section><section id="fail" />(乍一看应该会在清理过程中触发 DOM 方法)并查看其行为是否有所不同。如果是这样,您已经确定了 jQuery 中的一个错误和 HTML5 shiv 的限制。如果没有,至少这是一种交叉的可能性。

于 2009-07-28T18:07:36.660 回答
-2

开发 IE6 和 7 时还没有 HTML5。

于 2009-07-27T23:33:08.747 回答