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=Edge
的X-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:<!doctype html>
每个相关的(以及许多不相关的)浏览器都支持它。
没有它... ...好吧... quirksmode ...
您永远都不想在 quirksmode 下运行任何事情,因为您永远不知道哪种 JS/CSS/html5 支持会突然消失或表现得怪异...
所以不要这样做。
【讨论】:
以上是关于IE9 等效于 querySelectorAll的主要内容,如果未能解决你的问题,请参考以下文章
Class:hover 适用于 Firefox,但不适用于 Chrome 和 IE9
如何模仿断词:break-word;适用于 IE9、IE11 和 Firefox
jQuery背景按钮动画适用于Chrome和IE8,但不适用于Firefox或IE9 [重复]