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的 原生的还有什么好的解决方案吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我觉得你是想写
all[i].className.indexOf(className)另外,如果是判断 className 的话,为什么不用
dom.classList.contains()呢JavaScript中Array对象的标准方法中,没有indexOf()方法
但最新的javascript里又有了,不知道你在什么浏览器上运行,
加上这个吧
indexOf一直就有吧,我记得是原生方法来着.加个toString()再试试。
这样写不行的,
比如说你传入的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所分成的数组。