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

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

问题描述



我会使用document.getElementsByClassName,但IE不支持它。 p>

所以我试着 Jonathan Snook的解决方案: / p>

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

...但IE仍然说:



< blockquote>

对象不支持此属性或方法


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



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



更新: / h1>

我可以使用它了!



As @ joe提及该函数不是文档的方法。



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

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



...同样如果只需要IE8 + / strong>,然后这将工作:

  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 if(re.test(els [i] .className))a.push(els [i] ;
return a;
}

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


What is the best method to retrieve an array of elements that have a certain class?

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

So I tried Jonathan Snook's solution:

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');

...but IE still says:

Object doesn't support this property or method

Any ideas, better methods, bug fixes?

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

Update:

I got it to work!

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');


...Also if you only need IE8+ support then this will work:

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

Use it just like normal:

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

解决方案

It's not a method of document:

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天全站免登陆