// 返回相同类"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);我标红色的这块不理解?
任者用意是什么?
为了什么而要这么写?

解决方案 »

  1.   

    (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
      

  2.   

    这里的strTagName == "*"应该是判断传入的检索参数,如果是*的话,检索所有标签(相当于任意标签)oElm.all应该是判断对象的类型:文档DHTML对象的话,有all集合,而dom对象的则没有
    <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>
      

  3.   


    理解了。
    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);
    直接写成这样就可以了。为什么要多此一举,感觉没必要。你们认同我的想法吗?
      

  4.   

    的确,这里确实可以用
    var arrElements = oElm.getElementsByTagName(strTagName);