JavaScript(JS)

一  JS的簡介

            JavaScript是基於對象和事件驅動的腳本語言,主要應用在客戶端。

            基於對象:提供好了很多對象,可以直接拿過來使用

            事件驅動:HTML做網站靜態效果,JavaScript動態效果

            客戶端:專門指的是瀏覽器

            特點:交互性(信息的動態交互)

                       安全性(不可以直接訪問本地磁盤)

                       跨平臺性(只要是可以解析JS的瀏覽器都可以執行,和平臺無關)

            JavaScript和Java的區別:

                    1  Java是sun公司,現在是Oracle;js是網景公司

                    2  JavaScript是基於對象的,Java是面向對象的

                    3  Java是強類型的語言,JS是弱類型的語言

                                   比如Java裏面  int ="10";

                                   js:var i=10;var m="10";

                    4  JavaScript只需解析就可以執行,而Java需要先編譯成字節碼文件,再執行

            JavaScript的組成(三部分)

                 ECMAScript

                         ECMA:歐洲計算機協會—制定JavaScript語法

                BOM:

                         broswer  object model    瀏覽器對象模型

                DOM:

                         document object model  文檔對象模型

二  JS和HTML的結合方式

          1  使用一個標籤<script type="text/javascript">js代碼</script>

          2  使用script標籤,引入一個外部的js文件

                   創建一個js文件,demo.js

                   使用此方式的時候,就不要在script標籤裏寫js代碼了,不會執行

demo.js代碼

alert("第二種方式");

html代碼

<html>
	<head>
		<title></title>
	</head>
	<script type="text/javascript">
		alert("第一種方法");
	</script>
	<script type="text/javascript" src="demo.js">
		
	</script>
	<body>
		
	</body>
</html>


三  JS的原始類型和變量聲明

            Java的基本數據類型:byte,short,int,long,float,double,char,double

            js的原始類型:

                   stringL字符串

                             var  str="abc";

                   number:數字類型

                             var m=123;

                   boolean:true和false

                             var b=true;

                   null:var date = new Date();

                           表示獲取一個對象的引用,null表示對象的引用爲空,所有的對象的引用也是object

                   undifinedL:定義一個變量,沒有賦值。var aa;

          typeof():查看的當前變量的類型

<html>
	<head>
		<title></title>
	</head>
	<script type="text/javascript">
		//定義一個字符串
		var str="abc";
		alert(str);
		//定義一個數字
		var m=123;
		alert(typeof(m));
		//定義一個布爾類型
		var  flag=true;
	</script>
	<script type="text/javascript" src="demo.js">
		
	</script>
	<body>
		
	</body>
</html>

四  JS的語句

            Java裏面的語句

                  if判斷

                  switch語句

                  循環  for  while  do-while

            js裏面的這些語句

                   if判斷語句:

                         

                   switch語句:

                           Java裏面支持數據類型。在JDK1.7開始支持string類型

                           js裏面都支持

                            switch(a){

                                       case 5:

                                                   break;

                                       case 6:

                                                  break;

                                        ......

                                       default:

                               }

                   for:

                           

                   while:

                               

                   do-while:

<html>
	<head>
		<title></title>
	</head>
	<script type="text/javascript">
		var a=5;
		//if判斷
		if(a==5)
			alert("5");
		else
			alert("不是5")
		var b=6;
		//switch語句
		switch(b){
			case 3:
				alert("3");
				break;
			case 6:
				alert("6");
				break;
			default:
				alert("other");
			break;
		}
		//while語句
		var i=5;
		while(i>1){
			alert(i);
			i--;
		}
		//for循環
		for(var s=0;s<=5;s++){   //變量是var ,而不是int
			alert(s);
		}
	</script>
	<body>
		
	</body>
</html>

五  JS的運算符

           +=:   x+=y   ====>x=x+y 

            大部分運算與Java都一樣,以下爲不一樣的

             在js裏面不區分整數和小數

          字符串相加和相減的操作

          boolean:如果設置成true,相當於這個值是1;

                          如果設置成false,相當於這個值是0;

          ==和===的區別:都是做判斷

               ==比較的是值;===比較的是值和類型

<html>
	<head>
		<title></title>
	</head>
	<script type="text/javascript">
		var a=123;
		alert(a/1000*1000);   //在Java裏面得0,在js裏得123,在js裏面不區分整數和小數
		
		//字符串的操作
		var str="456";
		alert(str+1);//在Java和js裏都是4561,正常的字符串鏈接
		alert(str-1);//相減的時候,執行減法的運算。得455
		//如果字符串不是數字,會提示NAN

		//boolean類型操作
		var flag=true;    //等於1
		alert(flag+1);
		var flag1=false;   //等於0
		alert(flag1+1);

		//==和===的區別
		var aa=5;
		if(aa==5){
			alert("5");
		}
		else
			alert("other");
		var aa="5";
		if(aa===5){
			alert("5");
		}
		else
			alert("other");

	</script>
	<body>
		
	</body>
</html>

六  99乘法表的練習

         

<html>
	<head>
		<title>實現99乘法表</title>
	</head>
	
	<body>
	<script type="text/javascript">
		document.write("<table border='1' bordercolor='red'>");//document裏面使用雙引號,如果設置標籤的屬性需要使用單引號,document可是輸出常量,變量還可以輸出HTML標籤
		//循環行
		for(var i=1;i<=9;i++){
			document.write("<tr>");
			for(var j=1;j<=i;j++){
				document.write("<td>");
				document.write(j+"*"+i+"="+j*i);
				document.write("</td>");
			}
			document.write("</tr>");
					
		}
		document.write("</table>");
	</script>
	</body>
</html>

七  JS的數組

          什麼是數組?

                使用變量,var m=10;

                java裏面的數組,定義 int []  arr ={1,2,3};

          定義方式(三種)

                第一種:var arr=[1,2,3];     var arr=[1,"4",true];

                第二種:使用內置對象 Array      var  arr1=new Array(5) ;  //定義一個數組,長度爲5.

                                                                   arr1[0]="1";

                第三種:使用內置對象Array

                              var arr2=new Array(3,4,5);   //定義一個數組,數組裏面的元素是3,4,5

       數組裏面有一個屬性:length—獲取數組的長度

       數組裏面可以存放不同的數據類型的數據

<html>
	<head>
		<title>數組的定義方式</title>
	</head>
	
	<body>
	<script type="text/javascript">

		//第一種方式定義數組
		var arr=[1,2,"3"];
		document.write("第一種方式"+arr+",數組的長度"+arr.length);
		
		//第二種方式定義數組
		var arr1=new Array(3);
		arr1[0]="a";
		arr1[1]="b";
		arr1[2]="c";
		document.write(",第二種方式"+arr1);

		//第三種方式定義數組
		var arr2=new Array(6,7,8);
		document.write(",第三種方式"+arr2);
	</script>
	</body>
</html>

八  JS的函數

           在js裏面定義函數(方法)有三種方法

           在函數的參數列表裏面,不需要寫var,直接寫變量名稱就可以

                    第一種:使用一個關鍵字function

                                    function 方法名(參數列表){

                                                  方法體;

                                                  返回值可有可無(根據實際需要)

                                    }          

                    第二種:匿名函數

                                     var add  =   function (參數列表){ 方法體和返回值}

                    第三種:動態函數(用得少)

                                   使用js裏面的一個內置對象 Function

                                       var   add= new Funcrtion ("參數列表","方法體和返回值");    

九  JS的全局變量和局部變量

           全局變量:在script標籤裏定義一個變量,這個變量在頁面中js部分都可以使用
           局部變量:在方法體內部定義一個變量,只能在方法體內部使用

<html>
	<head>
		<title>js的變量</title>
		
	</head>
	
	<body>
	
	</body>
	<script>\
		var aa=10;
		alert("在方法外面調用全局變量aa="+aa);
		function test(a,b){
			var nn=20;
			alert("在方法內面調用全局變量aa="+aa);
			alert("在方法內面調用局部變量nn="+nn);
		}
		test();
		//alert("在方法外面調用局部變量nn="+nn);   //不好使
		
	<script>
		alert("在另一個script裏面調用全局變量aa="+aa);
		//alert("在另一個script裏面調用局部變量nn="+nn);  //不好使
	</script>
</html>

十  script放的位置

          建議把script標籤放到</body>後面
           如果現在有一個這樣的需求:
                     在js裏面需要獲取到input裏面的值,如果把script標籤放在head裏面
                     會出現問題
                     HTML解析是從上到下解析的,script標籤放到的是head裏面,直接在裏面取input裏面的值,
                    因爲頁面還沒有解析到input那一行,肯定取不到。

十一  JS的重載的簡單介紹

           什麼叫重載?方法名相同,參數列表不相同

            js是否有重載?沒有

<html>
	<head>
		<title>js的重載</title>
		
	</head>
	
	<body>
	
	</body>
	<script>
		function add1(a,b){
			return a+b;
		}
		function add1(a,b,c){
			return a+b+c;
		}
		function add1(a,b,c,d){
			return a+b+c+d;
		}

		alert(add1(2,2));  //NAN
		alert(add1(2,2,2));   //NAN
		alert(add1(2,2,2,2));    //8
	</script>
</html>

十二  JS的string對象

              創建String對象
                       var str="123";

             方法和屬性(文檔)
                       屬性 length:字符串的長度

                       方法:
                            1 與HTML相關的方法
                                      bold():加粗
                                      fontcolor():設置字符串的顏色
                                      fontsize():設置字體的大小
                                      link():將字符串顯示成超鏈接
                                      sub():下標
                                      sup():上標

<html>
	<head>
		<title>String</title>
	</head>
	<body>
	
	</body>
	<script>

		//length屬性
		var str ="abcde";
		document.write(str.length);

		//bold方法
		document.write("<hr/>");
		var str1="jiacu";
		document.write(str1.bold());

		//fontcolor
		document.write("<hr/>");
		var str2="字體顏色";
		document.write(str2.fontcolor("red"));

		//fontsize()
		document.write("<hr/>");
		var str3="zitidaxiao";
		document.write(str3.fontsize(5));

		//link
		document.write("<hr/>");
		var str4="超鏈接";
		document.write(str4.link("hello.html"));	//點擊超鏈接到hello.html頁面	

		//sub和sup
		document.write("<hr/>");
		var str5="100";
		var str6="200";
		var str7="300";
		document.write(str5.sub());	
		document.write(str7);	
		document.write(str6.sup());
	</script>
</html>


                            2 與Java相似的方法

                                      concat():鏈接字符串   

                                      charAt():返回指定位置的字符串
                                      indexOf():返回字符串位置
                                      split():把字符串切分成字符串數組
                                      replace():替換字符串
                                            傳遞兩個參數:第一個參數是原始的字符,第二個是要替換成的字符
                                      substr():從第幾位開始,向後截取幾位
                                      substring():從第幾位開始,到第幾位結束,但不包含最後那一位
 

<html>
	<head>
		<title</title>
	</head>
	<body>
	
	</body>
	<script>
		//concat方法
		var str1="abc";
		var str2="efg";
		document.write(str1.concat(str2));

		//charAt() 
		document.write("<hr/>");
		var str3="abcdefg";
		document.write(str3.charAt(0));  //如果字符的位置不存在,返回空字符串

		//indexOf()
		document.write("<hr/>");
		var str4="hijklmn";
		document.write(str4.indexOf("j")); //如果字符不存在,會返回-1

		//split()
		document.write("<hr/>");
		var str5="-b-c-d";
		var arr1=str5.split("-");
		document.write("分割後數組長度"+arr1.length);	

		//replace()	
		document.write("<hr/>");
		var str6="abcdefg";
		document.write(str6.replace("b","B"));	
		
		//substr()和substring()
		document.write("<hr/>");
		var str7 ="abcdefghijklmn";
		document.write("substr的結果"+str7.substr(5,3)+"<br/>")  //fgh,從5開始向後截取三位
		document.write("substring的結果"+str7.substring(5,3));   //de  截取第三到第四位  [3,5)
	</script>
</html>


十三  JS的Array對象
       創建數組(三種)
            var arr1= [1,2,3];
            var arr2=new Array(3);//長度是3
            var arr3=new Array(1,2.3);//數組中的元素是1 2 3
       屬性:length:查看數組的長度
      方法:
           concat():鏈接兩個或更多的數組,並返回結果
           join():元素通過指定的分隔符進行分割
           push():表示向數組末尾添加一個或更多個元素,返回數組的新的長度
           pop();刪除最後一個元素並且返回刪除的那個元素
           reverse():顛倒數組中元素的順序

<html>
	<head>
		<title>js的 Array對象</title>
	</head>
	<body>
	
	</body>
	<script>
		//length屬性
		var arr1=[1,2,3];
		document.write(arr1.length);

		//concat()
		document.write("<hr/>");
		var arr11=[1,2,3];
		var arr12=[4,5.6];
		document.write(arr11.concat(arr12));

		//join()
		document.write("<hr/>");
		var arr2=new Array(3);
		arr2[0]="a";
		arr2[1]="b";
		arr2[2]="c";
		document.write(arr2); //默認以分號分隔各個元素
		document.write("<br/>");
		document.write(arr2.join("-"));//以-進行分隔

		//push()  也可以傳進一個數組,把數組當做一個整體元素傳進去,不管數組有多長,新的長度只加1,數組中的所有元素合併成一個整體
		document.write("<hr/>");
		var arr3=new Array(3);
		arr3[0]="tom";
		arr3[1]="lily";
		arr3[2]="lucy";
		document.write(arr3);
		document.write("長度爲"+arr3.length);
		document.write("<br/>");
		document.write("新的長度"+arr3.push("jack"));

		//pop()
		document.write("<hr/>");
		var arr4=["zhangsan","lisi","wangwu","zhaoliu"+"<br/>"];
		document.write("old array:   "+arr4);
		document.write("return:   "+arr4.pop()+"<br/>");
		document.write("new array:  "+arr4);	

		//reverse()
		document.write("<hr/>");
		var arr5=["aaaaa","bbbbb","cccc","dddd"];
		document.write("old array:   "+arr5+"<br/>");
		document.write("new array:   "+arr5.reverse());	
	</script>
</html>

十四  JS的Date對象
        在Java裏面獲取當前時間
               Date date = new Date();
                   //格式化
                   //toLocaleString
js裏面獲取當前時間
               var date = new Date();

               toLocaleString():轉換成本地形式的時間 
               getFullYear():得到當前的年,返回四位
               getYear():得到當前的年,返回兩位

               getMonth():得到當前的月(返回的是值0-11)

              getDay():獲取當前的星期(返回值0-6)星期日作爲一週的第一天,返回的是0;

              getDate():獲取當前的日(1-31)
              getHours():獲取當前的小時(0-24)
              getMinutes():獲取當前的分鐘(0-59)

              getSeconds():獲取當前的秒(0-59)

               getTime():獲取毫秒數,返回的是1970年1月1日至今的毫秒數

              應用場景:第一次訪問網站很快,第二次訪問網站很快,由於緩存

             使用毫秒數來處理緩存的效果(沒有緩存)

              http://www.baidu.com?毫秒數

<html>
	<head>
		<title>js的Date對象</title>
	</head>
	<body>
	
	</body>
	<script>
		//獲取當前時間
		var date =new Date();
		document.write(date);
		//轉換成習慣的格式
		document.write("<hr/>");
		document.write(date.toLocaleString());

		//得到當前的年
		document.write("<hr/>");
		document.write("year:  "+date.getFullYear());
		
		//獲取當前的月
		document.write("<hr/>");
		var month=date.getMonth()+1;      //返回的是0—11
		document.write("Month:   "+month);  

		//獲取當前的星期
		document.write("<hr/>");
		document.write("Week:  "+date.getDay());  //0-6

		//獲得當前的日
		document.write("<hr/>");
		document.write("day:   "+date.getDate());

		//獲取當前的小時
		document.write("<hr/>");
		document.write("hour:  "+date.getHours());

		//獲取當前的分鐘
		document.write("<hr/>");
		document.write("Minutes:   "+date.getMinutes());

		//獲取當前的秒
		document.write("<hr/>");
		document.write("Seconds:   "+date.getSeconds());

		//獲取當前的毫秒
		document.write("<hr/>");
		document.write("times:   "+date.getTime());		
	</script>
</html>


十五  JS的Math對象

            數學的運算
                  不像Date,String等,不是對象的方法,是靜態方法,使用可以直接使用Math.方法名稱()
                   ceil(): 向上舍入
                   floor():向下舍入
                   round():四捨五入
                   random():得到隨機數(僞隨機數)(0.0-1.0)

<html>
	<head>
		<title>js的Math對象</title>
	</head>
	<body>
	
	</body>
	<script>
		var mm=10.4;
		document.write("old:   "+mm+"<br/>");//10.4
		document.write("ceil:   "+Math.ceil(mm)+"<br/>");  //11
		document.write("floor:   "+Math.floor(mm)+"<br/>");//10
		document.write("round:    "+Math.round(mm));//10
		
		//random()
		document.write("<hr/>");
		document.write(Math.random());
		
		//得到0-9的隨機數
		document.write("<hr/>");
		document.write("0-9的隨機數:  "+Math.floor(Math.random()*10));		
	</script>
</html>


十六  JS的全局函數

           什麼是全局函數?
                     不屬於任何一個對象,直接使用名稱使用
                eval():執行js代碼(如果字符串是一個js代碼,使用方法直接執行) 
                encodeURI():表示對字符進行編碼
                decodeURI();對字符進行解碼
                encodeURIComponent();
                decodeURIComponent():
                isNaN():返回true和false(不是數字返回true,是數字返回false)
                parseInt():類型轉換

<html>
	<head>
		<title>js的全局函數</title>
	</head>
	<body>
	
	</body>
	<script>
		//eval()
		var  str="alert('eval方法');";
		eval(str);

		//encodeURI()
		document.write("<hr/>");
		var str1="測試中文aaaa123";  //中文編碼
		var encode1=encodeURI(str1);
		document.write("編碼:  "+encode1);

		//decode()
		document.write("<hr/>");
		document.write("解碼:   "+decodeURI(encode1));

		//isNaN()
		document.write("<hr/>");
		var str2="123";
		document.write("isNaN:   "+isNaN(str2)+"<br/>");
		var str3="abcd";
		document.write("isNaN:   "+isNaN(str3));

		//parseInt():
		document.write("<hr/>");
		var str4="123";
		document.write("以字符串相加的形式:  "+str4+1+"<br/>"+"類型轉換後:     ");
		document.write(parseInt(str4)+1);
	</script>
</html>


十七  JS的函數重載

           js的重載是否存在,不存在
                    調用最後一個方法
                    把傳遞的參數保存到arguments裏
           面試:js裏面是否存在重載?
                    1 JS裏面不存在重載
                    2 但是可以通過其他方法模擬重載的效果:arguments

<html>
	<head>
		<title>js的函數重載</title>
	</head>
	<body>
	
	</body>
	<script>
	/*function add1(a,b){
		//alert("length:  "+arguments.length);
		for(var i=0;i<arguments.length;i++){
			alert("value:  "+arguments[i]);
		}
		return a+b;
	}*/
	function add1(){
		
		if(arguments.length==2){
			return arguments[0]+arguments[1];
		}else if(arguments.length==3){
			return arguments[0]+arguments[1]+arguments[2];
		}else if(arguments.length==4){
			return arguments[0]+arguments[1]+arguments[2]+arguments[3];
		}else{
			return 0;
		}

	}
	//調用
	document.write("兩個參數結果爲:"+add1(1,2)+"<br/>");
	document.write("三個參數結果爲:"+add1(1,2,3)+"<br/>");
	document.write("四個參數結果爲:"+add1(1,2,3,4)+"<br/>");
	document.write("五個參數"+add1(1,2,3,4,5));
	</script>
</html>


十八  JS的bom對象

          bom:broswer object model:瀏覽器對象模型
                 有哪些對象
                    navigator:獲取客戶機(瀏覽器)的信息
                    navigator.appName:瀏覽器的名稱
                    screen:獲取屏幕信息
                   location:請求的URL地址
                   href: 獲取請求的URL地址
                   設置URL地址:頁面上設置一個按鈕,按鈕上綁定一個時間,當我點擊這個按鈕,頁面可以跳轉到另外的壓面
                   history:請求的url的歷史記錄
                   history.back():上一個頁面
                   history.forward():下一個頁面
                   history.go():傳-1到上一個頁面,傳1到下一個頁面
                   window:表示一個窗口對象
                           頂層對象(所有的bom對象都是在window裏面操作的)
                      方法:
                         alert():頁面彈出提示框
                         confirm():確認提示框,可傳一個參數:顯示的內容
                         prompt():輸入對話框,可傳兩個參數:顯示的內容和輸入框裏面的默認值
                         open():打開一個新的窗口,可傳多個參數,
                                 第一個:打開新窗口的URL地址
                                 第二個:空
                                 第三個:窗口特徵:高;寬
                        close():關閉窗口(瀏覽器兼容性比較差)
                        做定時器:
                        setInterval("js代碼",毫秒數):
                                 window.setInterval("alert('123');",300);//代表每三秒執行一次alert
                       setTimeout("js代碼",毫秒數):表示在毫秒數之後執行,但是隻會執行一次
                                window.setTimeout("alert('在3秒後執行');",3000);
                       clearInterval():表示清除通過setInterval設置的定時器
                       clearTimeout():清除setTimeout設置的定時器
                      參數爲setInterval何setTimeout返回的值:
                                var id1=setInterval("alert('23');",3000);
                                clearInterval(id1);

<html>
	<head>
		<title>js的bom對象 </title>
	</head>
	<body>
		<input type="button" value="跳轉" οnclick="href1()"/>
		<hr/>
		<input type="button" value="open" οnclick="open1()"/>
		<hr/>
	</body>
	<script>
 		document.write("navigator的用法: "+navigator.appName);
		document.write("<hr/>");
		document.write("screen的用法:  "+"<br/>屏幕的寬:"+screen.width+"  屏幕的高:"+screen.height);
		document.write("<hr/>");
		document.write("location的用法:<br/>當前的URL地址"+location.href);
		
		//href設置URL地址
		function href1(){
			//document.write("使用跳轉按鈕進入的頁面");
			location.href="hello.html";
		}
		document.write("<hr/>");
		//confirm()
		var flag=confirm("confirm提示框");
		document.write("confirm有返回值:"+flag);

		document.write("<hr/>");
		//prompt()
		var pro = prompt("prompt輸入框:請輸入","0");
		document.write("prompt輸入框輸入的內容:"+pro);

		document.write("<hr/>");
		//open()
		function open1(){
			window.open("hello.html","","width=200,height=100");
		}
		
	</script>
</html>


十九  JS的dom對象

          dom:document object model:文檔對象模型
                      文檔:超文本文檔(超文本標記文檔)-html;xml

                      對象:提供了屬性和方法
                      模型: 使用屬性和方法操作超文本標記文檔
                      可以使用js裏面的DOM裏面提供的對象,使用這些屬性和方法,對標記型文檔進行操作
                      想要對標記型文檔進行操作,首先需要 對標記型文檔裏面的所有內容封裝成對象
                      需要把HTML裏面的標籤,屬性,文本內容都封裝成對象
                             要想對標記型文檔進行操作,解析標記型文檔
                    如何使用DOM解析HTML

                     解析過程:
                          根據HTML的層級結構,在內存中分配一個樹形結構,需要把HTML中的每部分封裝成對象
                          document對象:整個文檔
                          element對象:標籤對象
                          屬性對象
                          文本對象
 
                         Node節點對象:這個對象是這些對象的父對象
                                    如果在對象裏面找不到想要的方法,這個時候到Node去找

二十  DHTML的簡介

            DHTML:不是一種語言,是很多技術的簡稱(HTML CSS DOM JavaScript)
                   HTML:封裝數據
                   CSS:使用屬性和屬性值設置樣式
                   DOM:操作HTML文檔(標記型文檔)
                  JavaScript:專門指的是js的語法語句(ECMAScript)

二十一  document對象

           document對象:表示整個對象
                   每個載入的HTML文檔都會成爲document對象
          方法:
                write():向頁面輸出變量(值);向頁面輸出HTML代碼
                getElementByID():通過id得到元素(標籤),傳遞的參數是標籤裏面的id的值
                      得到屬性值:標籤對象.屬性名稱
                getElementsByName():通過name得到元素,返回的是一個集合
                getElementsByTagName():通過標籤得到元素

<html>
	<head>
		<title>js的dom對象</title>
	</head>
	<body>
		<input type="text" id="nameid" value="aaaa"/><br/>
		<input type="text" name="name1" value="ccc"/><br/>
		<input type="text" name="name1" value="ddd"/><br/>
		<input type="text" name="name1" value="eeee"/>
	</body>
	<script>
		var input1=document.getElementById("nameid");
		document.write("<hr/>");
		document.write("通過id獲取元素對象:"+input1+"<br/>");
		document.write("value的值:  "+input1.value+"<br/>")
		//向input裏面設置一個name
		input1.name="bbbbbb";
		document.write("向input標籤中設置name值: "+input1.name);

		document.write("<hr/>");
		var inputs = document.getElementsByName("name1");
		document.write("通過getElementsByName得到的集合的長度:"+inputs.length+"<br/>");
		//遍歷數組
		for(var i=0;i<inputs.length;i++){//通過遍歷數組,得到每個標籤裏面的具體的值
			document.write("輸出得到的集合的第"+(i+1)+"個元素:"+inputs[i]+"<br/>");
			//每個元素的value值
			document.write("輸出得到的集合的第"+(i+1)+"個元素:"+inputs[i].value+"<br/>");
		
		}

		document.write("<hr/>");
		var inputss = document.getElementsByTagName("input");//遍歷數組
		for(var i=0;i<inputss.length;i++){//通過遍歷數組,得到每個標籤裏面的具體的值
			document.write("輸出得到的集合的第"+(i+1)+"個元素:"+inputss[i]+"<br/>");
			//每個元素的value值
			document.write("輸出得到的集合的第"+(i+1)+"個元素:"+inputss[i].value+"<br/>");
		
		}
	</script>
</html>


二十二  案例window彈窗案例

          實現過程
                1 創建一個頁面
                        有兩個輸入項和一個按鈕
                        按鈕上面有一個事件,彈出一個新窗口 open
                2 創建彈出的頁面
                        表格
                       每一個有一個按鈕和編號和姓名
                       按鈕上有一個事件:把當前的編號和姓名,賦值到第一個頁面相應的位置

open.xml

<html>
	<head>
		<title></title>
	</head>
	<body>
		<table border="1" border-color="red">
			<tr>
				<td>操作</td>
				<td>編號</td>
				<td>姓名</td>
			</tr>
			<tr>
				<td><input type="button" value="選擇" οnclick="s1('001','張三')"/></td>
				<td>001</td>
				<td>張三</td>
			</tr>
			<tr>
				<td><input type="button" value="選擇" οnclick="s1('002','趙四')"/></td>
				<td>002</td>
				<td>趙四</td>
			</tr>
			<tr>
				<td><input type="button" value="選擇" οnclick="s1('003','王五')"/></td>
				<td>003</td>
				<td>王五</td>
			</tr>
		</table>
	</body>
	<script>
/*

*/	
		function s1(num1,name1){
			//需要把num1和name1賦值到window頁面
			//跨頁面的操作 opener:得到創建這個窗口的窗口,得到window頁面
			var pwin = window.opener;
			pwin.document.getElementById("numid").value = num1;
			pwin.document.getElementById("nameid").value = name1;
			//關閉窗口
			window.close();
		}	
	</script>
</html>

window.html

<html>
	<head>
		<title></title>
	</head>
	<body>
		編號:<input type="text" id="numid"/><br/>
		編號:<input type="text" id="nameid"/><br/>
		<input type="button" value="選擇" οnclick="open1()"/>
	</body>
	<script>
		//彈出窗口的方法
		function open1(){
			window.open("open.html","","width=250,height=150");
		}
	</script>
</html>


二十三  window彈窗案例需要注意的地方

           由於我們現在訪問的是本地文件,JS安全性,谷歌瀏覽器安全級別很高,不允許訪問本地文件
           在實際開發中,沒有這樣的問題,實際開發中不可能訪問本地的文件

二十四  案例—在末尾添加節點

             

<html>
	<head>
		<title>在末尾添加節點</title>
	</head>
	<body>
		<ul id="ulid">
			<li>1111</li>
			<li>2222</li>
			<li>3333</li>
			<li>4444</li>
		</ul>
		<input type="button" value="添加" οnclick="add1();"/>
	</body>
	<script>
		//在末尾添加節點
		function add1(){
			//獲取元素
			var ul1 = document.getElementById("ulid");
			//創建標籤
			var li1 = document.createElement("li");
			//創建文本
			var text1 = document.createTextNode("5555");
			//把文本加入到li下面
			li1.appendChild(text1);
			//把li加入到ul下面
			ul1.appendChild(li1);
		}
	</script>
</html>

二十五  elementt對象

            要操作element對象,首先必須要獲取到element
                   使用document裏面相應的方法獲取
            方法
                   獲取屬性裏面的值:getAttribute()
                   可以用戶獲取getElementById()獲取不了的關鍵字的屬性值:class;id
                   設置屬性的值:setAttribute()
                   刪除屬性:removeAttribute()
                  不能刪除value

<html>
	<head>
		<title>element對象</title>
	</head>
	<body>
		<input type="text" id="inputid" value="aaaa"/>
		<hr/>
	</body> 
	<script>
		var input1=document.getElementById("inputid");
		document.write("用getAttribute獲取value值"+input1.getAttribute("value"));
		input1.setAttribute("class","haha");
		document.write("<hr/>");
		document.write("用setAttribute設置之後的值"+input1.getAttribute("class"));
		
	</script>
</html>
         想要獲取標籤下面的子標籤
      使用屬性 childNodes,但是這個屬性的兼容性太差

      獲得標籤下面的子標籤的唯一有效辦法,使用getElementsByTagName方法

<html>
<head></head>
<body>
	<ul id="ulid">
		<li>aaaaa</li>
		<li>bbbbb</li>
		<li>ccccc</li>
	</ul>
</body>
<script>

	//獲取到ul下面的所有子標籤(子元素)
	//獲取ul標籤
	var ul1 = document.getElementById("ulid");
	//獲取ul下面的子標籤
	var lis = ul1.childNodes;//兼容性很差
	document.write(lis.length+"<br/>");//ie爲3,谷歌火狐爲7
	var lis1 = ul1.getElementsByTagName("li");
	document.write("用getElementsByTagName方法:"+lis1.length);
</script>
</html>

二十六  Node對象的屬性

        nodeName
        nodeType
        nodeValue
        使用dom解析html時候,需要html裏面的標籤,屬性和文本都封裝成對象
        標籤結點對應的值

                   nodeName:1
                   nodeType:大寫標籤名稱 比如SPAN
                   nodeValue:null
         屬性節點對應的值
                  nodeName:2
                  nodeType:屬性名稱
                  nodeValue:屬性的值
        文本節點對應的值
                  nodeName:3
                  nodeType:#text
                  nodeValue:文本內容

<html>
<head></head>
<body>
	<span id="spanid">哈哈哈哈哈</span>
	<hr/>
</body>
<script>
	//獲取標籤對象
	var span1 = document.getElementById("spanid");
	document.write(span1.nodeType+"<br/>");//1
	document.write(span1.nodeName+"<br/>");//SPAN
	document.write(span1.nodeValue+"<hr/>");//null
	//屬性
	var id1 = span1.getAttributeNode("id");
	document.write(id1.nodeType+"<br/>");//2
	document.write(id1.nodeName+"<br/>");//id
	document.write(id1.nodeValue+"<hr/>");//spanid
	//文本
	var text1 = span1.firstChild;
	document.write(text1.nodeType+"<br/>");//3
	document.write(text1.nodeName+"<br/>");//#text
	document.write(text1.nodeValue+"<hr/>");//哈哈哈哈哈
</script>
</html>

<html>
<head></head>
<body>
	<ul id="ulid">
		<li id="li1">qqqqq</li>
		<li id="li2">ppppp</li>
		<li id="li3">wwwww</li>
		<li id="li4">mmmmm</li>
	</ul>
	<hr/>
</body>
<script>
/*
父節點:
	ul是li的父節點
	parentNode
子節點
	li是ul的子節點
	childNodes:得到所有的子節點,但是兼容性很差
	firstChild:獲得第一個子節點
	lastChild:獲得最後一個子節點
同輩節點
	li之間關係是同輩節點
*/
	var li1 = document.getElementById("li1");
	var ul1 = li1.parentNode;
	document.write("獲取父節點ul的id:"+ul1.id);
	document.write("<hr/>");
	
	//獲取ul的第一個子節點
	var ul11 = document.getElementById("ulid");
	var li11 = ul11.firstChild;
	document.write("使用firstChild得到第一個子節點:"+li11.id+"<br/>");
	var li14 = ul11.lastChild;
	document.write("使用lastChild得到最後一個子節點:"+li14.id+"<hr/>");

	//獲得兄弟節點
	var li3 = document.getElementById("li3");
	document.write("獲得li3的下一個兄弟節點:"+li3.nextSibling.id+"<br/>");
	document.write("獲得li3的上一個兄弟節點:"+li3.previousSibling.id);
</script>
</html>

二十七  操作DOM樹

           appendChild方法
添加子節點到末尾
特點:類似於剪切的效果
insertBefore()方法
在某個節點之前插入一個新的節點
兩個參數:
newNode:要插入的節點
oldNode:在誰之前插入

         removeChild:刪除節點
         replaceChild:替換節點
         cloneNode(boolean):複製節點

<html>
<head>
	<style type="text/css">
		#div1{
			width:200px;
			height:150px;
			border:2px solid red;
		}
		#div2{
			width:250px;
			height:150px;
			border:5px dashed green;
	`	}
	</style>
</head>
<body>
	<div id="div1">
		<ul id="ulid1">
			<li id="li11">lily</li>
			<li id="li12">mary</li>
			<li id="li13">jack</li>
		</ul>
	</div>
	<div id="div2">
	</div>
	<input type="button" value="add" οnclick="add1();" />
	<input type="button" value="insert" οnclick="insert1();"/>
	<input type="button" value="remove" οnclick="remove1();"/>	
	<input type="button" value="replace" οnclick="replace1();"/>
	<input type="button" value="copy" οnclick="copy1();"/>	
</body>
<script>
	function add1(){
		//得到div2
		var div2 = document.getElementById("div2");
		//獲取ul
		var ul1 = document.getElementById("ulid1");
		div2.appendChild(ul1);
	}
	function insert1(){
		//在mary之前添加一個人
		/*
			1 獲取li12標籤
			2 創建li
			3 創建文本
			4 把文本添加到li下面
			5 獲取到ul
			6 把li添加到ul下面
		*/
		var li13 = document.getElementById("li12");
		var li14 = document.createElement("li");
		var text = document.createTextNode("lucy");
		li14.appendChild(text);
		var ul11 = document.getElementById("ulid1");
		ul11.insertBefore(li14,li12);
	}
	function remove1(){
		/*
			獲取到要刪除的節點
			獲取其父節點
			刪除
		*/
		var li13 = document.getElementById("li13");
		var ul12 = document.getElementById("ulid1");
		ul12.removeChild(li13);
	}
	function replace1(){
		//將lily替換爲other
		/*
			1 獲取到要替換的liA
			2 創建li的標籤
			3 創建文本
			4 把文本添加到li的下面
			5 獲取父節點ul
			6 完成替換
		*/
		var li11 = document.getElementById("li11");
		var li111 = document.createElement("li");
		var text = document.createTextNode("other");
		li111.appendChild(text);
		var ul13 = document.getElementById("ulid1");
		ul13.replaceChild(li111,li11);
	}
	function copy1(){
		//把ul複製到另一個div上
		/*
			1 獲取到ul
			2 執行復制方法
			3 把複製之後的內容放到div上面
				獲取到div
				appendChild方法
		*/
		var ul14 = document.getElementById("ulid1");
		var ulcopy = ul14.cloneNode(true);
		var div2 = document.getElementById("div2");
		div2.appendChild(ulcopy);

	}
</script>
</html>

二十八  innerHTML屬性

         這個屬性不是dom的組成部分,但是大多數瀏覽器都支持的屬性
               第一個作用:獲取標籤裏面的文本內容
               第二個作用:向標籤裏面設置內容(可以是html代碼)

<html>
<head>
	<style type="text/css">
		#div11{
			width:200px;
			height:150px;
			border:2px dashed red;
		}
	</style>
</head>
<body>
	<span id="sid">哈哈哈哈</span>
	<div id="div11">
	</div>
	<hr/>
</body>
<script>
	var span1 = document.getElementById("sid");
	document.write("通過innerHTML獲取內容"+span1.innerHTML);
	document.write("<hr/>");
	//向div裏面設置內容<h1>AAAAA</h1>
	var div11 = document.getElementById("div11");
	div11.innerHTML = "<h1>AAAAA</h1>"
</script>
</html>

二十九  案例—動態顯示時間

          得到當前的時間
          var date = new Date();
         var d1 = date.toLocaleString();
        需要讓頁面每一秒獲取時間
         setInterval方法
       顯示到頁面上
        每一秒向div裏面寫一次時間
        使用innerHTML屬性

<html>
<head>
	<style type="text/css">
		#times{
			width:200px;
			height:150px;
			border:2px dashed red;
		}
	</style>
</head>
<body>
	<div id="times">
	</div>
	
</body>
<script>
	function getD1(){
		var date = new Date();
		var d1 = date.toLocaleString();	
		var div1 = document.getElementById("times");
		div1.innerHTML = d1;
	}
	setInterval("getD1();",1000);
</script>
</html>

三十  案例—全選練習

        使用複選框上面一個屬性判斷是否選中

checked屬性

            checked=true :選中,反之,不選中

         創建一個頁面
複選框和按鈕
四個複選框表示愛好
還有一個複選框操作,全選和全不選,有一個事件
三個按鈕,分別有事件
全選
全不選
反選

<html>
<head>
	
</head>
<body>
	<input type="checkbox" id="boxid" οnclick="selAllNo();"/>全選/全不選<br/>
	<input type="checkbox" name="love"/>籃球<br/>
	<input type="checkbox" name="love"/>排球<br/>
	<input type="checkbox" name="love"/>羽毛球<br>
	<input type="checkbox" name="love"/>乒乓球<hr/>
	<input type="button" value="全選" οnclick="selAll();"/>
	<input type="button" value="全不選" οnclick="selNo();"/>
	<input type="button" value="反選" οnclick="selOther();"/>
</body>
<script>
	function selAll(){
		/*
			1 獲取要操作的複選框
			2 返回的是數組
				屬性 checked判斷複選框是否選中
				遍歷數組,得到每一個複選框checkbox設置其屬性checked=true
		*/
		var all = document.getElementsByName("love");
		for(var i = 0;i<all.length;i++){
			var all1 = all[i];
			all1.checked = true;
		}			
	}
	function selNo(){
		var all = document.getElementsByName("love");
		for(var i = 0;i<all.length;i++){
			var all1 = all[i];
			all1.checked = false;
		}			
	}
	function selAllNo(){
		var check = document.getElementById("boxid");
		if(check.checked==true)
			selAll();
		else
			selNo();
	}
	function selOther(){
		var all = document.getElementsByName("love");
		for(var i = 0;i<all.length;i++){
			var all1 = all[i];
			if(all1.checked == false)
				all1.checked = true;
			else
				all1.checked = false;
		}	
	}
</script>
</html>

三十一  案例—下拉列表左右選擇

          下拉選擇框
創建一個頁面
兩個下拉選擇框
設置屬性multiple
四個按鈕

<html>
<head>
	
</head>
<body>
	<select id ="s1" multiple="multiple" style="width:100px;height:150px">
		<option>11111</option>
		<option>22222</option>
		<option>33333</option>
		<option>44444</option>
		<option>55555</option>
		<option>66666</option>	
	</select>
	<select id ="s2" multiple="multiple" style="width:100px;height:150px">
		<option>AAAAA</option>
		<option>BBBBB</option>
		<option>CCCCC</option>
		<option>DDDDD</option>
		<option>EEEEE</option>
		<option>FFFFF</option>	
	</select>
	<hr/>	
	<input type="button" value="選中添加到右邊>>" οnclick="selToRight()"/>
	<input type="button" value="全部添加到右邊>>" οnclick="allToRight()"/>
	<br/>
	<input type="button" value="選中添加到左邊<<" οnclick="selToLeft()"/>
	<input type="button" value="全部添加到左邊<<" οnclick="allToLeft()"/>
</body>
<script>
	function selToRight(){
		/*
			1 獲取s1裏面的option
			2 判斷是否被選中
				屬性 selected
			3 如果是選中
			4 得到s2
			5 appendChild方法
		*/
		
		var select1 = document.getElementById("s1");
		var select2 = document.getElementById("s2");
		var options1 = select1.getElementsByTagName("option");
		for(var i=0;i<options1.length;i++){
			var option1 = options1[i];
			if(option1.selected==true){
				select2.appendChild(option1);
				i--;
			}
		}
	}
	function allToRight(){
		var select1 = document.getElementById("s1");
		var select2 = document.getElementById("s2");
		var options1 = select1.getElementsByTagName("option");
		for(var i=0;i<options1.length;i++){
			var option1 = options1[i];
			select2.appendChild(option1);
			i--;		
		}		
	}
	function selToLeft(){
		var select1 = document.getElementById("s1");
		var select2 = document.getElementById("s2");
		var options2 = select2.getElementsByTagName("option");
		for(var i=0;i<options2.length;i++){
			var option2 = options2[i];
			if(option2.selected==true){
				select1.appendChild(option2);
				i--;
			}
		}		
	}
	function allToLeft(){
		var select1 = document.getElementById("s1");
		var select2 = document.getElementById("s2");
		var options2 = select2.getElementsByTagName("option");
		for(var i=0;i<options2.length;i++){
			var option2 = options2[i];
			select1.appendChild(option2);
			i--;		
		}		
	}
</script>
</html>

三十二  案例—省市聯動

   

<html>
<head>
	
</head>
<body>
	<select id ="country" οnchange="add1(this.value);">
		<option value="0">--請選擇--</option>
		<option value="中國">中國</option>
		<option value="美國">美國</option>
		<option value="日本">日本</option>		
	</select>
	<select id ="city" >
		
	</select>
	
</body>
<script>
	//創建一個數組存儲數據
	var arr = new Array(3);
	arr[0]=["中國","北京","吉林","哈爾濱","遼寧"];
	arr[1]=["美國","華盛頓","底特律","休斯頓","紐約"];
	arr[2]=["日本","東京","北海道","大阪","廣島"];
	function add1(val){
		/*
			1 遍歷二維數組
			2 得到也是一個數組
			3 拿到的數組中的第一個值和傳遞過來的值作比較
			4 如果相同,獲得到第一個值後面的元素
			5 得到city的select
			6 添加過去,appendChild方法
				創建option
		由於每次都要向city裏面添加option
		第二次添加,會追加
			每次添加之前,判斷一下city裏面是否有option,如果有,刪除
		*/
		var city = document.getElementById("city");
		var options = city.getElementsByTagName("option");
		for(var m=0;m<options.length;m++){
			var op = options[m];
			city.removeChild(op);
			m--
		}
		for(var i=0;i<arr.length;i++){
			var arr1 = arr[i];
			var firstvalue = arr1[0];
			if(firstvalue == val){
				for(var j=1;j<arr1.length;j++){
					var value1=arr1[j];
					var option1 = document.createElement("option");
					var text1 = document.createTextNode(value1);
					option1.appendChild(text1);
					city.appendChild(option1);
				}
			}
		}
	}
</script>
</html>

三十三  案例—動態生成表格

        

<html>
<head>
	
</head>
<body>
	行: <input type="text" id="row">
	列: <input type="text" id="col">
	<br/>
	<input type="button" value="生成" οnclick="make();">
	<hr/>
	<div id="divv">
	</div>
</body>
<script>
	function make(){
		/*
			1 得到輸入的行和列的值
			2 生成表格
				循環行
				在行裏面循環單元格
			3 顯示到頁面上
		*/
		var rows = document.getElementById("row").value;
		var cols = document.getElementById("col").value;
		var tab = "<table border='1' bordercolor='red'>";
		for(var i=1;i<=rows;i++){
			tab +="<tr>";
			for(var j=1;j<=cols;j++){
				tab +="<td>aaaaa</td>";	
			}
			tab +="</tr>";
		}
		tab +="</table>";
		var divv = document.getElementById("divv");
		divv.innerHTML=tab;
	}
</script>
</html>





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章