首页 > indexOf循环中无效吗

indexOf循环中无效吗

function (className, idName) {
   var elements=[];
    var node = null;
    if (arguments.length == 2) {
        node = document.getElementById(idName);
    } else {
        node = document;
    }
    var all = node.getElementsByTagName('*');
    for (var i = 0; i < all.length; i ++) {
        if (className.indexOf(all[i].className)>=0) {
            elements.push(all[i]);
        }
    }
    return elements;
}

上面的indexOf无效 是哪里写错了吗

这个方法 是想要兼容获取class的 原生的还有什么好的解决方案吗?


JavaScript中Array对象的标准方法中,没有indexOf()方法
但最新的javascript里又有了,不知道你在什么浏览器上运行,

加上这个吧

if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(elt) { 
    var len = this.length >>> 0; 
    var from = Number(arguments[1]) || 0; 
    from = (from < 0) ? Math.ceil(from) : Math.floor(from); 
    if (from < 0) from += len; 
    for (; from < len; from++) { 
        if (from in this && this[from] === elt) return from; 
    } 
    return - 1; 
    }; 
}

我觉得你是想写 all[i].className.indexOf(className)

另外,如果是判断 className 的话,为什么不用 dom.classList.contains()


这样写不行的,
比如说你传入的className为'aa bc',即他的类名为'aa'和’bc',那当遍历到元素的类名为‘a'的元素的时候,className.indexOf(all[i].className)的值为0.
所以正确的做法是可以直接使用classList中的contain方法,如边城大神所说,当然要考虑兼容的话,可以自己写一个,就是把传入的className以空格分开,再判断子元素的className是否在这个数组里。
className.split(' ').indexOf(all[i].className)当然这个只考虑到了all[i]元素的类只有一个,所以再考虑仔细一点的话,就要把all[i]元素的className也分成数组,看这个数组里的元素是否存在于传入的参数className所分成的数组。


indexOf一直就有吧,我记得是原生方法来着.加个toString()再试试。

className.indexOf(all[i].className =》 className.toString().indexOf(all[i].className
【热门文章】
【热门文章】