// 返回相同类"class"定义的节点数组,oElm为外面所包节点,strTagName为类对应的标签名,strClassName为类名
function getElementsByClassName(oElm, strTagName, strClassName) {
//返回包含strTagName标签名的数组
var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
var arrReturnElements = new Array();
strClassName = strClassName.replace(/-/g, "\-");//对className转义
var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");// '\s'空白字符的运用,显示是为防止多个class节点
var oElement;
//用数组对匹配的className进行添加
for(var i=0; i<arrElements.length; i++){
oElement = arrElements[i];
if(oRegExp.test(oElement.className)){
arrReturnElements.push(oElement);
}
}
return (arrReturnElements);
}
请问var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);我标红色的这块不理解?
任者用意是什么?
为了什么而要这么写?
function getElementsByClassName(oElm, strTagName, strClassName) {
//返回包含strTagName标签名的数组
var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
var arrReturnElements = new Array();
strClassName = strClassName.replace(/-/g, "\-");//对className转义
var oRegExp = new RegExp("(^|\s)" + strClassName + "(\s|$)");// '\s'空白字符的运用,显示是为防止多个class节点
var oElement;
//用数组对匹配的className进行添加
for(var i=0; i<arrElements.length; i++){
oElement = arrElements[i];
if(oRegExp.test(oElement.className)){
arrReturnElements.push(oElement);
}
}
return (arrReturnElements);
}
请问var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);我标红色的这块不理解?
任者用意是什么?
为了什么而要这么写?
strTagName == "*" 返回的是true or false
oElm.all返回的是true or false
(strTagName == "*" && oElm.all) 返回的是true or false ,等于true时arrElements = oElm.all
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>test</title>
<script>
window.onload = function(){
alert(document.all);//object
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.loadXML("<root><a>aa</a></root>");
var doc = xmlDoc.documentElement;
alert(doc.getElementsByTagName("a")[0].text);//aa
alert(doc.all);//undefined
};
</script>
</head><body></body></html>
理解了。
var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);如果第二个参数strTagName == "*",并且oEle.all节点(IE支持)支持,返回oElem.all数组。但是all[] 已经被 Document 接口的标准的 getElementByid() 方法和 getElementsByTagName() 方法以及 Document 对象的 getElementsByName() 方法所取代。
var arrElements = oElm.getElementsByTagName(strTagName);
直接写成这样就可以了。为什么要多此一举,感觉没必要。你们认同我的想法吗?
var arrElements = oElm.getElementsByTagName(strTagName);