我正在运行一些使用它的javascript:
controls = document.querySelectorAll("input,textarea,button");
它应该适用于 IE 9(这是开发人员和客户使用的版本)。但是在我们的项目中,我们使用了一些非常古老的 Web 组件,它们只能在兼容模式下正常工作。而 querySelectorAll 仅适用于我在研究后发现的标准模式。
有没有其他选择?
编辑:它在 Chrome 和 FF 上运行良好
我正在运行一些使用它的javascript:
controls = document.querySelectorAll("input,textarea,button");
它应该适用于 IE 9(这是开发人员和客户使用的版本)。但是在我们的项目中,我们使用了一些非常古老的 Web 组件,它们只能在兼容模式下正常工作。而 querySelectorAll 仅适用于我在研究后发现的标准模式。
有没有其他选择?
编辑:它在 Chrome 和 FF 上运行良好
querySelectorAll
在 IE9 中运行良好。它甚至可以在 IE8 中运行。
但听起来你的问题是让它专门在怪癖模式或兼容模式下工作。
如果那是问题,那么......好吧,问题是模式,而不是功能。您需要使站点进入标准模式,然后querySelectorAll
才能工作。
兼容模式的重点是让浏览器模拟旧版本的 IE。它执行此操作的主要方法是禁用自该版本以来添加的所有功能。
所以基本上你说的是“我已经关闭了浏览器中的一半功能,我怎样才能让其中一个功能再次工作?”
显而易见的答案是:再次打开这些功能。
这样做的方法是确保浏览器处于标准模式。
你需要做两件事:
确保你有一个有效的文档类型,这样你就可以避免 Quirks 模式。如果您没有,请添加<!DOCTYPE html>
到代码的最顶部(<html>
标签上方)。
在元素中的某处添加 IE 标准模式元标记<head>
:
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
这将迫使 IE 使用它可用的最佳模式——因此 IE9 将处于 IE9 标准模式等。
您应该确保以上两项都在您网站的所有页面中。
[编辑]
您提到您依赖于仅在兼容模式下工作的旧组件。
基本答案是您将无法querySelectorAll
在您陷入兼容模式的同一站点中使用。您还会错过许多其他现代浏览器功能。
如果可能,您应该尝试升级该组件,或将其修复为在现代标准模式下工作。
如果您真的无法退出兼容模式,那么您几乎陷入困境。
在这种情况下,您唯一真正的选择是切换到使用像 jQuery 这样的内置了自己的选择器引擎的库。
如果您已经在不使用 jQuery 的情况下编写了您的网站,那么必须重写所有内容才能使用它是一个非常丑陋的想法,但这可能是您唯一的选择。
好吧,经过一番搜索,我最终使用了这个:
if( navigator.userAgent.indexOf("MSIE") != -1 ) {
controls = document.getElementsByTagName('input');
}else{
controls = document.querySelectorAll("input,textarea,button");
}
有用。我会做更多的测试,希望它能工作xD。
根据MDN
还有一种与 Internet Explorer 兼容的方式来使用 Array.prototype.forEach 进行迭代:
const list = document.querySelectorAll('input[type=checkbox]');
Array.prototype.forEach.call(list, function (checkbox) {
checkbox.checked = true;
});
这是你想做的吗?