我正在运行一些使用此功能的JavaScript:
controls = document.querySelectorAll("input,textarea,button");
它应该在IE 9(开发人员和客户端使用的版本)上工作。但是在我们的项目中,我们使用了一些非常老的Web组件,它们仅在兼容模式下才能正常工作。根据我的研究发现,querySelectorAll仅适用于标准模式。
还有其他选择吗?
编辑:在Chrome和FF上正常工作
querySelectorAll
在IE9中工作正常。它甚至可以在IE8中使用。
但是听起来您的问题是使它特别在怪癖模式或兼容模式下工作。
如果是问题,那么...问题是模式,而不是功能。您需要将站点设置为标准模式,然后querySelectorAll
将起作用。
兼容性模式的全部要点是使浏览器模拟IE的旧版本。这样做的主要方法是禁用自该版本以来添加的所有功能。
因此,您基本上说的是:“我已经关闭了浏览器的一半功能,如何使这些功能之一再次起作用?”
显而易见的答案是:重新打开功能。
执行此操作的方法是确保浏览器处于标准模式。
您需要做两件事:
请确保您具有有效的文档类型,因此可以避免使用Quirks模式。如果您没有,请在代码的最顶部(<!DOCTYPE html>
标记上方)添加<html>
。
在<head>
元素中的某处添加IE标准模式元标记:
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
这将迫使IE使用其可用的最佳模式-因此IE9将处于IE9标准模式,等等。]
您应确保以上两项均在您网站的所有页面中。
[编辑]
您提到您所依赖的是仅在兼容模式下有效的旧组件。基本答案是,您将无法在兼容模式下的同一站点中使用querySelectorAll
。而且还有许多其他现代浏览器功能,您也会错过。
[如果可能,您应该尝试升级该组件,或者将其修复为在现代标准模式下工作。
如果您really
无法退出兼容模式,则说明您很受困。在这种情况下,您唯一真正的选择是切换到使用内置了自己的选择器引擎的jQuery之类的库。
如果您已经在不使用jQuery的情况下编写了网站,则必须重写所有内容以使用它,这是一个很丑陋的想法,但这可能是您唯一的选择。
嗯,经过一番搜索,我最终使用了这个:
根据MDN