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