JavaScript getElementsByClassName方法求解

function getElementsByClassName(node,classname){
if(node.getElementsByClassName){
return node.getElementsByClassName(**classname**);
} else {
var results=new Array();
var elems=node.getElementsByTagName("*");
for(var i=0; i<elems.length; i++) {
if(elems[i].className.indexOf(classname) !=-1) {
results[result.length]=elems[i];
}
}
return results;
}
}
该代码中加粗部分参数是什么意思?getElementsByClassName方法的参数应该是一个字符串,为什么括号内没有引号呢?
阅读 4.2k
5 个回答

低版本的ie浏览器不支持getElementsByClassName方法,上面那段代码是封装了一个兼容性良好的getElementsByClassName,各个浏览器版本都可以使用。
比如说你要在整个页面中获取元素,第一个参数就是document ,第二个参数是你想要获取的元素的classname 。
比如说你要在ul中获取元素,第一个参数就是对ul的引用,这个引用可以通过其他方法例如getElementById或者getElementsByTagName 来得到,第二个参数同上

因为那是个形参呀,你要使用这个函数时,将字符串(类名)作为第二个参数传递过去即可。

这个写法有bug,建议第八行改成

if(elems[i].className.indexOf(" "+classname+" ") !=-1) {


这样就不会在找类名为'div'的时候也匹配到类名'div123','123div','1div23'之类的

为什么是*,代表什么意思

用document.querySelector()方法更方便吧,不过ie6和ie7不兼容好像

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏