4

如何this.getElementsByClassName('class')[0]为 Internet Explorer 6-8 工作?有没有什么 polyfill 可以解决这个问题?

4

1 回答 1

5

仅作记录,较旧的浏览器仍然存在,因为人们一直在努力支持它们。

用于 document.getElementsByClassName 的 Polyfill

话虽如此,简短的谷歌搜索可能会将您带到此链接: https ://gist.github.com/eikes/2299607

IE6/7 的 polyfill 是这样的:

if (d.evaluate) { // IE6, IE7
  pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
  elements = d.evaluate(pattern, d, null, 0, null);
  while ((i = elements.iterateNext())) {
    results.push(i);
  }
}

基于document.evaluate方法

https://developer.mozilla.org/en-US/docs/Web/API/document.evaluate

编辑: element.getElementsByClassName 的 Polyfill

您似乎想在 HTML 元素而不是文档上调用 getElementsByClassName 方法。不幸的是,我认为您不能在 IE6 和 7(甚至 8)上填充它,因为这个答案似乎暗示: 如何将我自己的方法添加到 HTMLElement 对象?

您仍然可以使用document.evaluate来完成您想要的功能(提示:第二个参数是上下文节点;它应该是您的元素),但是您需要将调用代码更改为如下所示:

<div onclick="myPolyfill('class', this)[0].innerHTML = 'works'">
于 2013-09-22T14:09:28.690 回答