用于特定用途的getElementsByClassName的Polyfill

use*_*274 4 javascript internet-explorer

如何this.getElementsByClassName('class')[0]为Internet Explorer 6-8工作?是否有任何polyfill可以解决此问题?

Tib*_*bos 5

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

用于document.getElementsByClassName的Polyfill

话虽这么说,但简短的Google搜索可能已将您带到此链接: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);
  }
}
Run Code Online (Sandbox Code Playgroud)

根据document.evaluate方法

https://developer.mozilla.org/zh-CN/docs/Web/API/document.evaluate

编辑:element.getElementsByClassName的Polyfill

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

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

<div onclick="myPolyfill('class', this)[0].innerHTML = 'works'">
Run Code Online (Sandbox Code Playgroud)