在 ie6、7 等旧浏览器中“document.querySelectorAll”的替代方法是什么?

What is the alternative way to "document.querySelectorAll" in old browsers like ie6, 7?

提问人:Lion King 提问时间:2/11/2014 最后编辑:Lion King 更新时间:11/17/2023 访问量:7402

问:

我认为我的问题很清楚,就像标题一样。
有没有另一种方法可以模拟替代在较旧的浏览器上使用,例如.
document.querySelectorAllinternet 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.
}

如果可能的话,我想要原生的想法,我会做任何事情。

JavaScript 对象

评论

1赞 Denys Séguret 2/11/2014
另一种方法是导入 jQuery(或较轻的嘶嘶声)
1赞 Johan 2/11/2014
github.com/inexorabletash/polyfill/blob/master/polyfill.js#L652
2赞 Pointy 2/11/2014
IE6 和 7 是 Sizzle 选择器引擎仍被维护的(主要)原因。如果你真的想支持成熟的CSS选择器,这是一个不平凡的问题,而Sizzle是坚实而全面的。
0赞 albert 2/11/2014
Webkit 也是其中相当大的一部分

答:

-1赞 Aurelio De Rosa 2/11/2014 #1

如果你想要一个如此强大的方法,你最好的机会是使用 Sizzle(jQuery 使用的选择器引擎)。

1赞 Christoffer Bubach 12/10/2019 #2

我遇到过这些填充方法:document.querySelectorAll

  • 手动遍历

    通常通过将选择器拆分为多个部分,并在各个部分上运行更基本的调用组合。通常从类似的东西开始,然后以此为基础。document.getElementsByTagName('*');

    一些源代码甚至对不兼容 WC3 的 DOM 模型使用回退,例如 Netscape 的 API 或 IE 的 API,从而支持到 IE4-5。搜索将为您提供有关这些旧技术的更多信息。document.layersdocument.allDHTML

  • 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)的主页是有关该主题的信息的必备页面。

0赞 Darshana Pathum 12/23/2019 #3

为此,您可以使用 polyfill