IE9 等效于 querySelectorAll

Posted

技术标签:

【中文标题】IE9 等效于 querySelectorAll【英文标题】:IE9 equivalent of querySelectorAll 【发布时间】:2012-10-21 16:42:48 【问题描述】:

我在 FF 或 Chrome 中没有遇到任何问题,但 IE9 在此方法上出现错误。我认为我可以使用它,因为这里已显示它受支持:

http://www.quirksmode.org/dom/w3c_core.html

但是,实际情况似乎并非如此。话虽如此,我可以用什么代替它?

编辑:这是它失败的确切行:

var maximize_buttons = document.querySelectorAll(".maximize");

那是我第一次尝试使用 querySelectorAll()。浏览器版本号为9.0.8112.16421

编辑(再次):我已经在两台不同的计算机上验证了这个错误。然而,他们有一个共同点——他们都在 VMware 上运行 Windows 7。这有关系吗?

浏览器模式是 IE9,但文档模式默认设置为 quirks。将其更改为 Internet Explorer 9 标准解决了问题,但如果怪癖是默认设置,我仍然需要让它工作。

【问题讨论】:

IE 9 在标准和怪癖模式下支持 qSA,您使用的是什么浏览器?试试alert(typeof document.querySelectorAll); 你的选择器是什么样的?它可能使用了 IE9 不支持的选择器。 问题已编辑,包含更多详细信息。该警报给了我“未定义”。 您是否在启用了兼容模式的页面上进行测试?如果 IE 正在模拟 IE 7,它将完全像这样。 如果您正确标记页面,@Fibericon Quirks 不是默认设置。你有文档类型吗? 【参考方案1】:

您需要使用 IE9 的 html5 文档类型才能使用 querySelectorAll() javascript 方法。 doctype 看起来像这样,应该放在网站所有页面的第一行。

<!DOCTYPE html>

【讨论】:

其实,这还不是全部。任何完全限定的 DOCTYPE 都可以使用,不仅仅是 HTML5 文档类型。浏览器只能处于标准模式。【参考方案2】:

正如其他答案所暗示的,这与怪癖与标准模式无关。

这与所谓的“兼容模式”有关。 IE9 到 IE11 默认对内网站点使用“兼容模式”,其他站点根据您的设置使用。

告诉 IE 您的网站实际上使用了 Web 标准,并且它也不应该自闭:

    更新您的服务器配置以发送带有值IE=EdgeX-UA-Compatible 标头,或者

    将其作为meta 标记添加到head 元素标记的顶部:

    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    

当然,您也应该有一个 doctype,但是仅仅一个 doctype 并不能处理(in)Compatibility Mode 问题。

【讨论】:

谢谢。在我的测试用例中,meta 应该在调用 js 代码之前。【参考方案3】:

运行 quirksmode 就像运行非标准的 IE6。

你必须,必须,必须(!)在每个 HTML 页面的顶部都有一个 doctype:&lt;!doctype html&gt; 每个相关的(以及许多不相关的)浏览器都支持它。 没有它... ...好吧... quirksmode ...

您永远都不想在 quirksmode 下运行任何事情,因为您永远不知道哪种 JS/CSS/html5 支持会突然消失或表现得怪异...

所以不要这样做。

【讨论】:

以上是关于IE9 等效于 querySelectorAll的主要内容,如果未能解决你的问题,请参考以下文章

Class:hover 适用于 Firefox,但不适用于 Chrome 和 IE9

如何模仿断词:break-word;适用于 IE9、IE11 和 Firefox

C# 等效于 Java 标点正则表达式

jQuery背景按钮动画适用于Chrome和IE8,但不适用于Firefox或IE9 [重复]

等效于 Riverpod 中的 ChangeNotifierProvider 小部件

NSTimer 等效于 Javascript