Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE8和querySelectorAll()返回的元素仅包含开头HTML标记时出现问题_Javascript_Jquery_Html_Internet Explorer 8_Selectors Api - Fatal编程技术网

Javascript IE8和querySelectorAll()返回的元素仅包含开头HTML标记时出现问题

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属性设置为的元素。请注意,缺少结束标记(以及所有内部元素)。这只发生

我的网页没有呈现IE8中
标记中的内容。我使用的是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,并将Modernizer2.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的角度说,这是一个自定义标记。