Javascript IE8和querySelectorAll()返回的元素仅包含开头HTML标记时出现问题
我的网页没有呈现IE8中Javascript IE8和querySelectorAll()返回的元素仅包含开头HTML标记时出现问题,javascript,jquery,html,internet-explorer-8,selectors-api,Javascript,Jquery,Html,Internet Explorer 8,Selectors Api,我的网页没有呈现IE8中标记中的内容。我使用的是backbone.js框架,我有一个视图将元素附加到页面上。我也在使用HTML5 第一个元素是find(导航栏及其所有元素);但是,IE8在尝试附加.page content元素时会抛出一个错误。我已经将这个问题追溯到jQuery的find方法中的一个不一致之处。仅在IE8中,当对包含标记的DOM执行.find('.page content')时,该方法返回一个.outerHTML属性设置为的元素。请注意,缺少结束标记(以及所有内部元素)。这只发生
标记中的内容。我使用的是backbone.js框架,我有一个视图将元素附加到页面上。我也在使用HTML5
第一个元素是find(导航栏及其所有元素);但是,IE8在尝试附加.page content
元素时会抛出一个错误。我已经将这个问题追溯到jQuery的find方法中的一个不一致之处。仅在IE8中,当对包含标记的DOM执行.find('.page content')
时,该方法返回一个.outerHTML
属性设置为
的元素。请注意,缺少结束标记(以及所有内部元素)。这只发生在IE8中(我还没有测试过>IE8),当它发生时,会导致jQuery的append()
方法内部的append()
方法失败
我深入研究了jQuery的find方法,发现问题的根源是当jQuery使用Web API方法querySelectorAll()
时。在jQuery的代码中,开发人员评论如下:
// qSA works strangely on Element-rooted queries
// We can work around this by specifying an extra ID on the root
// and working up from there (Thanks to Andrew Dupont for the technique)
// IE 8 doesn't work on object elements
然而,我真的不知道这意味着什么
我创建了一个JSFIDLE示例来演示这个问题:
如果在IE8中打开JSFIDLE链接,将显示一个警报:
<MAIN class=page-content>
<main class="page-content">
<div class="help-toggle">
<i class="icon-info-sign"></i>
</div>
</main>
或者,如果在Chrome或Firefox中打开JSFIDLE链接,将显示一个警报:
<MAIN class=page-content>
<main class="page-content">
<div class="help-toggle">
<i class="icon-info-sign"></i>
</div>
</main>
除了纠正我自己遍历DOM树的find方法之外,我不知道如何开始解决这个问题
注意:一种似乎有效的“创可贴”式解决方案是将
标签替换为
标签。但是,我不能永久使用此解决方案;我需要帮助找到使用
标签的方法。问题在于IE8不完全支持HTML5。特别是,它不知道元素main
是什么
其中一些问题可以通过使用解决,但我不知道它是否100%兼容
链接说明:
(简而言之,shim运行一个
文档。element为所有新的HTML5元素创建,以启动IE8
,使其意识到它们的存在。)经过六天的挖掘,我做了第一天应该做的事情。我将我的html5shiv和Modernizer更新到了它们的最新版本。具体而言,我将HTML5从3.6.1更新为3.7.0,并将Modernizer从2.5.3更新为2.7.1
这并不能直接回答我关于jQuery和WebAPI的详细功能的问题,但可以假定,最新版本的库可能会用一个5年的软件产品解决您的问题
谢谢Jeremy和cookie monster的帮助 main
是一个自定义标记。阅读IE中使用自定义标记,或者只使用标准标记……jQuery的注释“qSA
在以元素为根的查询中工作异常”,应该读得更像“qSA
没有按我们想要的方式工作,所以我们通过修改您提供的选择器来更改选择器的解释方式”。问题在于,正如预期的那样,选择器被解释为适用于整个文档。因此,如果您在p
元素上搜索span
,并且使用的选择器是“div span”
,qSA
将返回p
在div
中的匹配项,从那时起,span
也在div
内,使选择器匹配……jQuery更改它,使选择器仅应用于从p
元素开始的子DOM结构(给出上述示例),因此它仅在div
实际上也在p
内时匹配,(这将是无效的标记,但这与重点无关)感谢cookie monster帮助我们处理这些模糊的评论。是的,很抱歉,我应该从IE8的角度说,这是一个自定义标记。