【问题标题】:IE9 equivalent of querySelectorAllIE9 等效于 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 不是默认设置。你有文档类型吗?

标签: javascript internet-explorer internet-explorer-9 selectors-api


【解决方案1】:

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

<!DOCTYPE html>

【讨论】:

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

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

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

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

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

  2. 将其作为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 支持会突然消失或表现得怪异...

所以不要这样做。

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2019-04-04
    • 2013-11-29
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多