querySelectorAll alternative for IE
querySelectorAll alternative for IE
我正在运行一些使用以下内容的javascript:
controls = document.querySelectorAll("input,textarea,button");
它应该在IE 9上工作(这是开发人员和客户端使用的版本)。但在我们的项目中,我们使用了一些非常旧的web组件,这些组件只能在兼容模式下正常工作。querySelectorAll只在标准模式下工作,这是我经过一些研究后发现的。
还有其他选择吗?
EDIT:它在Chrome和FF 上运行良好
querySelectorAll
在IE9中运行良好。它甚至适用于IE8。
但听起来你的问题是让它专门在怪癖模式或兼容性模式下工作。
如果这就是问题所在,那么。。。问题是模式,而不是功能。您需要让站点进入标准模式,然后querySelectorAll
才能工作。
兼容模式的全部目的是让浏览器模仿旧版本的IE。它做到这一点的主要方法是禁用自该版本以来添加的所有功能。
所以基本上你说的是"我已经关闭了浏览器中一半的功能,我如何才能让其中一个功能重新工作?"
显而易见的答案是:重新打开这些功能。
这样做的方法是确保浏览器处于标准模式。
你需要做两件事:
-
请确保您有一个有效的doctype,这样您就可以避免Quirks模式。如果没有,请将
<!DOCTYPE html>
添加到代码的最顶部(<html>
标记上方)。 -
在
<head>
元素的某个位置添加IE标准模式元标签:<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
这将迫使IE使用其可用的最佳模式——因此IE9将处于IE9标准模式,等等。
你应该确保以上两个都在你的网站的所有页面上。
[EDIT]
您提到您所依赖的是一个只能在兼容模式下工作的旧组件。
基本的答案是,在兼容模式下,您将无法在同一个站点中使用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 for迭代:
const list = document.querySelectorAll('input[type=checkbox]');
Array.prototype.forEach.call(list, function (checkbox) {
checkbox.checked = true;
});
你想这么做吗?
- Livequery and DOMNodeInserted replacement for IE
- Javascript for not IE 7
- WordPress - Enqueue scripts for only if LT IE 9
- JavaScript for .在循环 IE 问题中
- 如何通过 JavaScript for IE 在输入框上键入
- innerHtml 在 ie for table 中不起作用
- InvalidStateError with msSaveBlob for json file in IE
- querySelectorAll alternative for IE
- this.type alternative for IE
- toLocaleString() for IE 8
- querySelectorAll for selector"而不是“;在IE 8上不起作用
- 原型事件.StopPropagation for IE >= 8
- Backbone.js BasicAuth for IE 9
- optimization jQuery for IE
- CSS Behaviour for IE: first-of-type
- Javascript For循环并不总是在IE中工作
- IE hack for javascript & iframe
- For Loop在IE中给出停止脚本错误
- Greasemonkey for IE如何运行用户java脚本
- Internet Explorer 8 - 视频.js for WordPress:IE 8 中的 JavaScript