javascript document.getElementsByClassName 与 IE 的兼容性 [英] javascript document.getElementsByClassName compatibility with IE

查看:31
本文介绍了javascript document.getElementsByClassName 与 IE 的兼容性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我会使用 document.getElementsByClassName 但 IE 不支持它.

I would use document.getElementsByClassName but IE does not support it.

所以我尝试了Jonathan Snook 的解决方案:

function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('(^| )'+classname+'( |$)');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}
var tabs = document.getElementsByClassName(document.body,'tab');

...但 IE 仍然说:

...but IE still says:

对象不支持此属性或方法

Object doesn't support this property or method

任何想法、更好的方法、错误修复?

Any ideas, better methods, bug fixes?

我不想使用任何涉及 jQuery 或其他大型 javascript"的解决方案.

I would prefer not to use any solutions involving jQuery or other "bulky javascript".

我开始工作了!

正如 @joe 提到的,该函数不是 document 的方法.

As @joe mentioned the function is not a method of document.

所以工作代码看起来像这样:

So the working code would look like this:

function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('(^| )'+classname+'( |$)');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}
var tabs = getElementsByClassName(document.body,'tab');


...另外如果您只需要 IE8+ 支持,那么这将起作用:

if(!document.getElementsByClassName) {
    document.getElementsByClassName = function(className) {
        return this.querySelectorAll("." + className);
    };
    Element.prototype.getElementsByClassName = document.getElementsByClassName;
}

像往常一样使用它:

var tabs = document.getElementsByClassName('tab');

推荐答案

不是文档的方法:

function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('(^| )'+classname+'( |$)');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}

tabs = getElementsByClassName(document.body,'tab');  // no document

这篇关于javascript document.getElementsByClassName 与 IE 的兼容性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆