【发布时间】:2020-02-29 09:05:49
【问题描述】:
我想知道document、HTMLDocument、Document、Element 和Node 之间的关系以实现 IE8 的getElementsByClassName 方法.. 但每当我尝试这些方法时,它都不起作用: document.getElementsByClassName = function(){}, HTMLDocument.getElementsByClassName=function(){} 或
Element.prototype.getElementsByClassName=function(){}.
if(!Element.getElementsByClassName) {
Element.prototype.getElementsByClassName = function(arg){
var cssSelector;
var parentElement = this.document||this.documentElement.document||document;
var queryElements = null;
if(arg){
if(arg.indexOf(' ')>0){
cssSelector = '[class~="'+arg+'"]';
}else{
cssSelector = "."+arg;
}
queryElements = parentElement.querySelectorAll(cssSelector);
}
return queryElements;
}
}
var elems = document.getElementsByClassName('limit').item(0);
var triangles = elems.getElementsByClassName('triangle');
debugger;
【问题讨论】:
-
请定义“不工作”。控制台错误?
-
我担心知道“它应该是怎样的”并不是你真正需要的......自从我使用 IE8 以来已经很长时间了,但是一些旧的浏览器实际上并没有像我们一样使用原型链现在习惯了,因此在创建实例后更改构造函数的原型并不会修改实例本身。但是你为什么要自己做呢?网上有很多这样的 polyfill 经过严格测试(顺便说一句,看看one of these,他们确实修改了实例,而不是原型)
标签: javascript internet-explorer dom bower