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