javascript - 兼容IE8的getElementsByClassName为何会报错?
大家讲道理
大家讲道理 2017-04-11 13:08:57
[JavaScript讨论组]

代码

因为getElementByClassName不兼容IE8,如下function封装了支持IE8的getElementByClassName函数




  
  Document


  

dddddddddd

ggggggg

报错

Uncaught TypeError: element.getElementsByTagName is not a function

请问问题出在哪?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
ringa_lee

报错是因为element.getElementsByTagNameelement是一个数组,不是节点对象。所以说

is not a function

我觉得这个方法的设计有点不合理,传入的参数(element, names)element 不要传数组,传一个父对象或者document就好使了。另外帮你简化一下代码,希望有助。

var getElementsByClassName = function(element, names) {        
    var result = [];
    var element = element != undefined ? element : document;            
    var all = element.getElementsByTagName('*');
    for(var i = 0;i < all.length; i++){
        if ((new RegExp('(\\s|^)' + names + '(\\s|$)')).test(all[i].className)) {
            result.push(all[i]);
        }
    }
    return result;
    
}

var t = getElementsByClassName(document,'haha');
var b = getElementsByClassName(t[0],'wawa');  //不能传数组,一定要的话要判断是document还是数组,再去遍历
console.log(t);
console.log(b[0].innerHTML);
大家讲道理

没有getElementsByTagName这个方法。

天蓬老师
var elements = element.getElementsByTagName('*');
// 这里的element你只考虑了他是一个节点的情况,那多个节点呢,非节点呢?

var t=getElementsByClassName(document,'haha');
var b=getElementsByClassName(t,'wawa'); // 这里你传进去的t不就是多个节点么
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号