jQuery的,HTML5追加()/ appendTo()和IE(jQuery, html5, ap

2019-07-30 21:50发布

如何复制:

  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失败。 火狐/ Safari浏览器将继续工作。

错误

思考

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

  • 如果我使用document.createElement()并创建我的新元素,它的工作原理,但似乎jQuery的append()与HTML5元素的问题。

Answer 1:

该缺陷是在IE中的实现的innerHTML的 - 由于某种原因,它不喜欢的innerHTML通过插入“未知”的元素 - 而DOM脚本是好的。

jQuery使用创建控股格,然后在你想通过innerHTML来追加在标记下降。 IE现在看到的未知元素作为两个新的破元件,即<article>content</article>被视为ARTICLE#text/ARTICLE ,引起的innerHTML borking。

下面是一个例子,看看在IE中,你会发现innerHTML的插入方法错误地报告插入DIV 3个节点: http://jsbin.com/olizu

截图对于那些没有IE: http://leftlogic.litmusapp.com/pub/2c3ea3e



Answer 2:

我就遇到了这个问题,太。 该解决方案似乎是使用innerHTML这已经附加到文档中的元素,然后提取创建的节点。 我创造了这个li'l功能来做到这一点:

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



Answer 3:

在嘲讽握住你的马在那里,每个人。 在偷看http://html5shiv.googlecode.com/svn/trunk/html5.js ,HTML5的SHIV并成功地欺骗IE6 / 7到做的createElement()。

在上述karbassi的情况下,人们希望IE6 / 7将首先注意HTML5的毒刃,然后执行jQuery的追加()后,每一次预期。 它显然将追加到追加时,不会做事的顺序。 这是很方便的知道。



Answer 4:

是否HTML5希夫处理innerHTML ? IE极有可能对待innerHTML不同于DOM方法一样createElement ,阅读jQuery的源(我推荐),看来你的代码触发innerHTML代替DOM方法。 你可以尝试重写<section id="fail"></section><section id="fail" />乍一看应触发在清理过程DOM方法),看看它是否具有不同的行为。 如果是这样,你已经确定在jQuery和错误的HTML5下脚的限制。 如果没有,至少是给划掉一个可能性。



Answer 5:

当IE6和7开发HTML5并不存在。



文章来源: jQuery, html5, append()/appendTo() and IE