zl程序教程

您现在的位置是:首页 >  后端

当前栏目

javascriptgetElementsByClassName和js取地址栏参数

JS 参数 地址栏
2023-06-13 09:14:15 时间
getElementsByClassName()
  为了从一大堆HTML代码中找出我们的树状菜单(也许有多个),我们先来实现一个通过className找DOM节点的方法:getElementsByClassName。这是对浏览器自有DOM方法的一个简单但实用的扩充。

  此方法有两个参数:ele指出以哪个DOM节点为根节点寻找(也就是说只找ele的子节点),className指出符合条件的节点的class属性中必须包含怎样的className。它的返回值是一个数组,存放了所有符合条件的节点。
复制代码代码如下:

functiongetElementsByClassName(ele,className){
//获取所有子节点
if(document.all){
varchildren=ele.all;
}else{
varchildren=ele.getElementsByTagName("*");
}
//遍历子节点并检查className属性
varelements=newArray();
for(vari=0;i<children.length;i++){
varchild=children[i];
varclassNames=child.className.split("");
for(varj=0;j<classNames.length;j++){
if(classNames[j]==className){
elements[elements.length]=child;
break;
}
}
}
returnelements;
}

vartrees=getElementsByClassName(document,"TreeView");

  最前面的一个if-else语是为了兼容IE5(IE5不能运行
document.getElementsByTagName("*"))。需要注意的是千万不要用浏览器检测的方法来写脚本,而应该直接使用将要用到的语句来测试是否可以执行,如果返回值为null或undefined,那再换一种方法。这样的脚本可以有更好的兼容性,也更健壮。
elements[elements.length]=child;,这句同样是为了兼容IE5才没有使用数组
的push方法。如果你一定要使用push方法,那么可以在执行getElementsByClassName()
之前先重载一遍push方法。代码如下:

Array.prototype.push=function(value){
this[this.length]=value;
}  注:原本我希望getElementsByClassName也能像push方法一样写,比如
HTMLElement.prototype.getElementsByClassName=...。不过实际操作的时候发现在
运行时HTMLElement这个对象并不是固定的,每种tag似乎都不一样,只能作罢。

取地址栏参数
复制代码代码如下:

//v1:
varURLParams=newArray();
varaParams=document.location.search.substr(1).split("&");
for(i=0;i<aParams.lengthi++){
varaParam=aParams.split("=");
URLParams[aParam[0]]=aParam[1];
}
//取得传过来的name参数
name=URLParams["name"];

//v2:
Request={
QueryString:function(item){
varsvalue=location.search.match(new
RegExp("[\?\&]"+item+"=([^\&]*)(\&?)","i"));
returnsvalue?svalue[1]:svalue;
}
}
varkey=Request.QueryString("key");