javascript 函数参数原来是可以缺省的
前几天看 javaEye 时看到一个童鞋写的 getElementsByClassName 函数。代码引自:http://www.javaeye.com/topic/702854
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
5 <title>无标题文档</title>
6 <script type="text/javascript">
7
8 /**
9 * 根据类名获得元素
10 * 参数说明:
11 * 1、className 类名
12 * 2、tag 元素名 默认所有元素
13 * 3、elm 父元素 默认doucment
14 */
15 document.getElementsByClassName = function(className, tag, elm) {
16 var testClass = new RegExp("(^|\s)" + className + "(\s|$)");
17 var tag = tag || "*";
18 var elm = elm || document;
19 var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
20 var returnElements = [];
21 var current;
22 var length = elements.length;
23 for(var i=0; i<length; i++){
24 current = elements[i];
25 if(testClass.test(current.className)){
26 returnElements.push(current);
27 }
28 }
29 return returnElements;
30 }
31
32
33
34 window.onload = function(){
35 var divs = document.getElementsByClassName("div");
36 alert(divs.length);
37 for(var i = 0; i < divs.length; i++){
38 alert(divs[i].id);
39 }
40 }
41 </script>
42 </head>
43
44 <body>
45
46 <div class="div" id="div1">
47 </div>
48 <div class="divvvv" id="div2">
49 <div class="div" id="div21">
50 </div>
51 </div>
52 <div class="div" id="div3">
53 </div>
54
55 </body>
56 </html>
57
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
5 <title>无标题文档</title>
6 <script type="text/javascript">
7
8 /**
9 * 根据类名获得元素
10 * 参数说明:
11 * 1、className 类名
12 * 2、tag 元素名 默认所有元素
13 * 3、elm 父元素 默认doucment
14 */
15 document.getElementsByClassName = function(className, tag, elm) {
16 var testClass = new RegExp("(^|\s)" + className + "(\s|$)");
17 var tag = tag || "*";
18 var elm = elm || document;
19 var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
20 var returnElements = [];
21 var current;
22 var length = elements.length;
23 for(var i=0; i<length; i++){
24 current = elements[i];
25 if(testClass.test(current.className)){
26 returnElements.push(current);
27 }
28 }
29 return returnElements;
30 }
31
32
33
34 window.onload = function(){
35 var divs = document.getElementsByClassName("div");
36 alert(divs.length);
37 for(var i = 0; i < divs.length; i++){
38 alert(divs[i].id);
39 }
40 }
41 </script>
42 </head>
43
44 <body>
45
46 <div class="div" id="div1">
47 </div>
48 <div class="divvvv" id="div2">
49 <div class="div" id="div21">
50 </div>
51 </div>
52 <div class="div" id="div3">
53 </div>
54
55 </body>
56 </html>
57
在这里我引用这段代码不是因为要方便自己以后调用,而是发现了一点我从没有用到的方法。
getElementsByClassName 有三个参数,但调用的时候不必传进三个参数,你只传进第一个参数就可以了,其它两个参数都是有默认值的。
原来 javascript 函数的参数是可以缺省的,这一点我倒是一直都不知道。
前一阵子这篇博文有一位博客园园友对此发表了“无言” 的评论,我不知他想表达什么意思。应该是想说我菜吧,我承认我的确很菜,学到的 javascript
知识都是很不系统的,到现在还没有真真正正看完一本 Javascript 的书。都是要用到某个知识点,才临时去了解的。至于 javascript 函数的参数是可以缺省的也是最近才知道。哪个人不是一步步走过来的?即使高手也不一定所有的知识点都了解的。但被人这样说的确很影响心情。
我运用到的例子:
1 function getStopSelectIDs(apmID,func)
2 {
3 var returnArr = [];
4 var stopObj = $name("stop[]");
5 for(var i=0;i<stopObj.length;i++)
6 {
7 var id = stopObj[i].getAttribute("id");
8 var arr = id.split("_");
9 var attpk_guid = arr[1];
10 var attpm_id = arr[2];
11 if (attpk_guid!=="2")
12 continue;
13 if(attpm_id==apmID)
14 returnArr.push(id);
15 }
16 if(func!==undefined)
17 func(apmID,returnArr);
18 else
19 return returnArr;
20 }
21
22 getStopSelectIDs($id("apm_id2_" + num).value,
23 function()
24 {
25 if(arguments[1]!==[])
26 {
27 for(key in arguments[1])
28 {
29 $id(arguments[1][key]).value = 1;
30 }
31 }else{
32 $id("stop_3_11_" + num).value = 1;
33 }
34 }
35 );
36
37
2 {
3 var returnArr = [];
4 var stopObj = $name("stop[]");
5 for(var i=0;i<stopObj.length;i++)
6 {
7 var id = stopObj[i].getAttribute("id");
8 var arr = id.split("_");
9 var attpk_guid = arr[1];
10 var attpm_id = arr[2];
11 if (attpk_guid!=="2")
12 continue;
13 if(attpm_id==apmID)
14 returnArr.push(id);
15 }
16 if(func!==undefined)
17 func(apmID,returnArr);
18 else
19 return returnArr;
20 }
21
22 getStopSelectIDs($id("apm_id2_" + num).value,
23 function()
24 {
25 if(arguments[1]!==[])
26 {
27 for(key in arguments[1])
28 {
29 $id(arguments[1][key]).value = 1;
30 }
31 }else{
32 $id("stop_3_11_" + num).value = 1;
33 }
34 }
35 );
36
37