提问人:Lion King 提问时间:2/11/2014 最后编辑:Lion King 更新时间:11/17/2023 访问量:7402
在 ie6、7 等旧浏览器中“document.querySelectorAll”的替代方法是什么?
What is the alternative way to "document.querySelectorAll" in old browsers like ie6, 7?
问:
我认为我的问题很清楚,就像标题一样。
有没有另一种方法可以模拟或替代在较旧的浏览器上使用,例如.document.querySelectorAll
internet explorer 6, 7
this.elements = [];
var selector, i;
if (document.querySelectorAll) {
selector = document.querySelectorAll(parameters);
for (i = 0; i < selector.length; i++) {
this.elements[i] = selector[i];
}
} else {
// Here is the alternative for older browsers.
}
如果可能的话,我想要原生的想法,我会做任何事情。
答:
如果你想要一个如此强大的方法,你最好的机会是使用 Sizzle(jQuery 使用的选择器引擎)。
我遇到过这些填充方法:document.querySelectorAll
手动遍历
通常通过将选择器拆分为多个部分,并在各个部分上运行更基本的调用组合。通常从类似的东西开始,然后以此为基础。
document.getElementsByTagName('*');
一些源代码甚至对不兼容 WC3 的 DOM 模型使用回退,例如 Netscape 的 API 或 IE 的 API,从而支持到 IE4-5。搜索将为您提供有关这些旧技术的更多信息。
document.layers
document.all
DHTML
CSS 行为
这是一种有趣的方法,因为它通常非常紧凑,但我听说它的性能也不是很好。
简而言之,CSS 行为是连接到标准 CSS 的 JS 表达式,因此您可以创建如下所示的动态 CSS 规则:
selector + '{x-qsa:expression(document._qsa && document._qsa.push(this))}';
以便将当前元素(选择器命中)推送到新创建的 -array 中,然后在从文档中删除 CSS 样式之前使用该数组。 您可能需要触发滚动事件以强制浏览器使用新创建的规则,即使该滚动为 0px。document._qsa
Web 组件,HTC 和 XUL
不,不是那种花哨的 HTML5 Polymer 东西。原始 (tm)。Web 组件绝不是什么新鲜事物。它通常在总括性术语下提及。
DHTML
显然,Netscape 和 IE 在如何最好地实现模块化组件的功能方面有不同的看法。Netscape 和最近的 Mozilla 都支持一种叫做 XUL 的东西,它基本上是 XML 声明,可以做各种有趣的事情,创建自定义元素,运行 JS 等等。
IE使用HTC文件几乎做同样的事情。有一些代码示例可以桥接这两个API,并允许您在Mozilla中运行HTC文件或在IE中运行XUL文件。迪恩·爱德华兹(Dean Edwards)的主页是有关该主题的信息的必备页面。
为此,您可以使用 polyfill。
评论