polyfill for getElementsByClassName用于特定用途

时间:2013-09-22 14:03:29

标签: javascript internet-explorer

如何使this.getElementsByClassName('class')[0]适用于Internet Explorer 6-8?是否有任何polyfill来解决这个问题?

1 个答案:

答案 0 :(得分:5)

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

polyfill for document.getElementsByClassName

有了这个说,一个简短的谷歌搜索可以带你到这个链接: 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)上填充,因为这个答案似乎暗示: How to add my own methods to HTMLElement object?

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

<div onclick="myPolyfill('class', this)[0].innerHTML = 'works'">