IE9中类似querySelectorAll的功能是什么?

5

在Firefox或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,但文档模式默认设置为怪异模式。将其更改为Internet Explorer 9标准可以解决问题,但如果默认为怪异模式,我仍然需要使其正常工作。

3
IE 9 在标准模式和怪异模式下都支持 qSA,你正在使用哪个浏览器?尝试使用 alert(typeof document.querySelectorAll); - RobG
2
你的选择器长什么样子?它可能使用了IE9不支持的选择器。 - alex
2
你在测试启用兼容模式的页面吗?如果IE模拟IE 7,则会完全像这样行事。 - DCoder
浏览器模式为IE9,但文档模式默认设置为quirks。将其更改为Internet Explorer 9标准解决了问题,但如果quirks是默认设置,则仍然需要使其正常工作。 - Fibericon
3
如果您正确标记您的网页,Quirks 模式并不是默认模式。您是否有文档类型声明? - alex
显示剩余2条评论
3个回答

6

您需要使用 html5 doctype 才能让 IE9 能够使用 querySelectorAll() JavaScript 方法。该 doctype 如下,并且应该作为站点中所有页面的第一行。

<!DOCTYPE html>

10
实际上,这并不是全部的真相。任何完全合格的DOCTYPE都可以使用,不仅仅是HTML5 doctype。浏览器只需要处于标准模式即可。 - Tomalak

5
这与其他答案所提到的怪癖模式和标准模式无关。
这与所谓的“兼容性模式”有关。IE9到IE11默认情况下在内部网站上使用“兼容性模式”,并根据您的设置在其他网站上使用。
要告诉IE,您的网站实际上使用Web标准,它不应该限制自己,请执行以下操作之一:
  1. Update your server config to send the X-UA-Compatible header with the value IE=Edge, or

  2. Add it as a meta tag right at the top of your head element markup:

    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    
当然,你应该有一个doctype,但仅仅有一个doctype并不能解决(不)兼容模式的问题。

谢谢。在我的测试案例中,在调用 JS 代码之前应该有 Meta。 - Leszek P

3
在IT技术中,运行quirksmode就像运行非标准IE6一样。您必须在每个HTML页面的顶部加上一个doctype声明:<!doctype html>。每个相关(和许多不相关)的浏览器都支持它。如果没有它...... 好吧...... quirksmode...... 您永远不知道什么样的JS / CSS / html5支持会突然消失或产生异常......因此请勿这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接