1. 程式人生 > >JavaWeb之day03js

JavaWeb之day03js

目錄:

1、js的String物件(****)

2、js的Array物件 (****)

3、js的Date物件 (****)
  * 獲取當前的月 0-11,想要得到準確的月 +1
  * 獲取星期時候,星期日是 0

4、js的Math物件 (****)
  * 靜態方法,直接Math.random()

5、js的全域性函式 (****)
  * 直接寫方法名稱 eval()

6、js的函式過載(****面試中問道)
  (1)不存在過載
  (2)可以通過其他方式模擬過載的效果 通過陣列arguments

=========================

7、js的BOM物件(******)
  navigator screen location history

8、window物件(*******)
  - 方法都要掌握
  - setInterval和setTimeout

9、DOM簡介和解析html(*******)

10、document物件(*******)
  - 記住幾個方法

11、案例:window練習(*******)

 

 

 

 


day03

上節內容回顧

1、html的表單標籤

  <form>:
    ** action method enctype
    輸入項:
      ** type="text"
      ** passwrod
      ** radio
      ** checkbox
      ** file
      ** submit
      ** reset
      ** type="image" src=""
      ** select
      ** textarea
      ** type=“button”
      ** hidden

2、css

  ** css和html的結合方式(四種)
    (1)在標籤裡面style
    (2)使用標籤<style>
    (3) 使用@import url()
    (4)link頭標籤實現

  ** css的基本選擇器(三種)
    (1)標籤選擇器
    (2)class選擇器 .名稱
    (3)id選擇器 #名稱

3、javascript

  ** java和javascript區別

  ** js原始型別(五個)
    string number boolean null undifined
    使用var
  ** js的語句
    if switch while for do-while
  ** js運算子
    * == 和 === 區別
  ** js的陣列
  ** 建立方式(三種)
    var arr1 = [1,2,3,"4"];
    var arr2 = new Array(3);
    var arr3 = new Array(4,5,6);
  ** 屬性 length:長度
  ** js的函式
  ** 定義方式(三種)
    function add1(){}
    function(){}
  ** js的全域性變數和區域性變數
  ** 全域性變數:在頁面的任何js的部分都可以使用
  ** 區域性變數:在方法內部定義的變數,只是在方法內部使用
  ** script標籤應該放在什麼位置 </body>

 

1、js的String物件

  ** 建立String物件
    *** var str = "abc";
  ** 方法和屬性(文件)
  *** 屬性 length:字串的長度

  *** 方法
  (1)與html相關的方法
    - bold():加粗
    - fontcolor(): 設定字串的顏色
    - fontsize(): 設定字型的大小

    - link(): 將字串顯示成超連結  w
      **** str4.link("hello.html")
    - sub() sup(): 下標和上標

  (2)與java相似的方法
    - concat(): 連線字串
    ** //concat方法
      var str1 = "abc";
      var str2 = "dfg";
      document.write(str1.concat(str2));

    - charAt():返回指定指定位置的字串
      ** var str3 = "abcdefg";
      document.write(str3.charAt(20)); //字元位置不存在,返回空字串
    - indexOf(): 返回字串位置
      ** var str4 = "poiuyt";
      document.write(str4.indexOf("w")); //字元不存在,返回-1
    - split():切分字串,成陣列
      ** var str5 = "a-b-c-d";
       var arr1 = str5.split("-");
         document.write("length: "+arr1.length);
    - replace() : 替換字串
      * 傳遞兩個引數:
        -- 第一個引數是原始字元
        -- 要替換成的字元
          * var str6 = "abcd";
          document.write(str6);
          document.write("<br/>");
          document.write(str6.replace("a","Q"));
    - substr()和substring()
      * var str7 = "abcdefghuiop";
      //document.write(str7.substr(5,5)); //fghui 從第五位開始,向後擷取五個字元
        *** 從第幾位開始,向後擷取幾位

      document.write("<br/>");
      document.write(str7.substring(3,5)); //de 從第幾位開始到第幾位結束 [3,5)
        *** 從第幾位開始,到第幾位結束,但是不包含最後哪一位

2、js的Array物件

  ** 建立陣列(三種)
    - var arr1 = [1,2,3];
    - var arr2 = new Array(3); //長度是3
    - var arr3 = new Array(1,2,3); //陣列中的元素是1 2 3

    - var arr = []; //建立一個空陣列
  ** 屬性:length:檢視陣列的長度

  ** 方法:
    - concat方法: 陣列的連線
      * var arr11 = [1,2,3];
      var arr12 = [4,5,6];
      document.write(arr11.concat(arr12));

    - join():根據指定的字元分割陣列
      * var arr13 = new Array(3);
        arr13[0] = "a";
        arr13[1] = "b";
        arr13[2] = "c";

        document.write(arr13);
        document.write("<br/>");
        document.write(arr13.join("-"));

    - push():向陣列末尾新增元素,返回陣列的新的長度
      ** 如果新增的是一個數組,這個時候把陣列當做一個整體字串新增進去

      * //push方法 
        var arr14 = new Array(3);
        arr14[0] = "tom";
        arr14[1] = "lucy";
        arr14[2] = "jack";
        document.write("old array: "+arr14);

        document.write("<br/>");
        document.write("old length:"+arr14.length);

        document.write("<br/>");
        document.write("new length: "+arr14.push("zhangsan"));

        document.write("<br/>");
        document.write("new array: "+arr14);

        * var arr15 = ["aaa","bbb","ccc"];
        var arr16 = ["www ","qqq"];

        document.write("old array:"+arr15);
        document.write("<br/>");
        document.write("old length:"+arr15.length);

        document.write("<br/>");
        document.write("new length:"+arr15.push(arr16));
        document.write("<br/>");
        document.write("new array: "+arr15);
        for(var i=0;i<arr15.length;i++) {
          alert(arr15[i]);
        }

    - pop():表示 刪除最後一個元素,返回刪除的那個元素
      * var arr17 = ["zhangsan","lisi","wangwu","zhaoliu"];
      document.write("old array: "+arr17);
      document.write("<br/>");

      document.write("return: "+arr17.pop());
      document.write("<br/>");
      document.write("new array: "+arr17);

    - reverse():顛倒陣列中的元素的順序
      * var arr17 = ["zhangsan","lisi","wangwu","zhaoliu"];
      document.write("old array: "+arr17);
      document.write("<br/>");

      document.write("return: "+arr17.pop());
      document.write("<br/>");
      document.write("new array: "+arr17);

      //reverse方法
        document.write("<hr/>");
        var arr18 = ["zhangsan1","lisi1","zhaoliu1","niuqi1"];
        document.write("old array: "+arr18);
        document.write("<br/>");
        document.write("new array:"+arr18.reverse());

3、js的Date物件

  ** 在java裡面獲取當前時間
    Date date = new Date();
    //格式化
    //toLocaleString() //2015年4月17日 11:17:12

  ** js裡面獲取當前時間
    var date = new Date();
    //獲取當前時間
    var date = new Date();
    document.write(date); // Fri Apr 17 10:47:46 UTC+0800 2015

    //轉換成習慣的格式
    document.write("<hr/>");
    document.write(date.toLocaleString());

  ** 獲取當前的年方法
    getFullYear():得到當前的年
    **** document.write("year: "+date.getFullYear());

  ** 獲取當前的月方法
    getMonth():獲取當前的月
    *** 返回的是 0-11月,如果想要得到準確的值,加1
    **** var date1 = date.getMonth()+1;
      document.write("month: "+date1);

  ** 獲取當前的星期
    getDay():星期,返回的是 (0 ~ 6)
    ** 外國朋友,把星期日作為一週的第一天,星期日返回的是 0
      而星期一到星期六 返回的是 1-6
    ** document.write("week: "+date.getDay());

  ** 獲取當前的日
    getDate():得到當前的天 1-31
    ** document.write("day: "+date.getDate());

  ** 獲取當前的小時
    getHours():獲取小時
    ** document.write("hour: "+date.getHours());
  ** 獲取當前的分鐘
    getMinutes():分鐘
    ** document.write("minute: "+date.getMinutes());

  ** 獲取當前的秒
    getSeconds(): 秒
    ** document.write("second: "+date.getSeconds());
  ** 獲取毫秒數
    getTime()
    返回的是1970 1 1 至今的毫秒數

    ** 應用場景:
    *** 使用毫秒數處理快取的效果(不有快取)
      http://www.baidu.com?毫秒數

4、js的Math物件

  * 數學的運算
    ** 裡面的都是靜態方法,使用可以直接使用 Math.方法()

    ** ceil(x): 向上舍人

    ** floor(x):向下舍人

    ** round(x):四捨五入

    ** random():得到隨機數(偽隨機數)
  - 得到0-9的隨機數
    Math.random()*10
    Math.floor(Math.random()*10));

5、js的全域性函式

  * 由於不屬於任何一個物件,直接寫名稱使用

    ** eval() : 執行js程式碼(如果字串是一個js程式碼,使用方法直接執行)
      **** var str = "alert('1234');";
        //alert(str);
        eval(str);

    ** encodeURI() :對字元進行編碼
      - %E6%B5%8B%E8%AF%95%E4%B8%AD%E6%96%87aaa1234

    **decodeURI() :對字元進行解碼

      encodeURIComponent() 和 decodeURIComponent()

    ** isNaN():判斷當前字串是否是數字
      -- var str2 = "aaaa";
        alert(isNaN(str2));
      *** 如果是數字,返回false
      *** 如果不是數字,返回true

    ** parseInt():型別轉換
      ** var str3 = "123";
      document.w rite(parseInt(str3)+1);   

6、js的函式的過載

  ** 什麼是過載?方法名相同,引數不同

  ** js的過載是否存在? 不存在
    ** 呼叫最後一個方法
    ** 把傳遞的引數儲存到 arguments數組裡面

  ** js裡面是否存在過載?(面試題目) 
    (1)js裡面不存在過載。
    (2)但是可以通過其他方式模擬過載的效果 (通過aruguments陣列來實現)

    *** 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;
        }
      }

7、js的bom物件

  ** bom:broswer object model: 瀏覽器物件模型

  ** 有哪些物件?
    *** navigator: 獲取客戶機的資訊(瀏覽器的資訊)
      - navigator.appName
      - document.write(navigator.appName);

    *** screen: 獲取螢幕的資訊
      - document.write(screen.width);
      document.write("<br/>");
      document.write(screen.height);

    *** location: 請求url地址
      - href屬性
      **** 獲取到請求的url地址
        - document.write(location.href);

      **** 設定url地址
        - 頁面上安置一個按鈕,按鈕上繫結一個事件,當我點選這個按鈕,頁面可以跳轉到另外一個頁面
        - location.href = "hello.html";

        **** <input type="button" value="tiaozhuan" onclick="href1();"/>
        - 滑鼠點選事件 onclick="js的方法;"

    *** history:請求的url的歷史記錄
      - 建立三個頁面
        1、建立第一個頁面 a.html 寫一個超連結 到 b.html
        2、建立b.html 超連結 到 c.html
        3、建立c.html

      - 到訪問的上一個頁面
        history.back();
        history.go(-1);

      - 到訪問的下一個頁面
        history.forward();
        history.go(1);

    **** window(****)
      * 視窗物件
      * 頂層物件(所用的bom物件都是在window裡面操作的)

      ** 方法
        - window.alert() : 頁面彈出一個框,顯示內容
      ** 簡寫alert()
        - confirm(): 確認框
          - var flag = window.confirm("顯示的內容");
        - prompt(): 輸入的對話方塊
          - window.prompt("please input : ","0");
          - window.prompt("在顯示的內容","輸入框裡面的預設值");
        - open() : 開啟一個新的視窗
          ** open("開啟的新視窗的地址url","","視窗特徵,比如視窗寬度和高度")
            -建立一個按鈕,點選這個按鈕,開啟一個新的視窗
              - window.open("hello.html","","width=200,height=100");
        - close(): 關閉視窗(瀏覽器相容性比較差)
          - window.close();
        - 做定時器
          ** setInterval("js程式碼",毫秒數) 1秒=1000毫秒
            - 表示每三秒,執行一次alert方法
            window.setInterval("alert('123');",3000);
          ** setTimeout("js程式碼",毫秒數)
            - 表示在毫秒數之後執行,但是隻會執行一次

            - 表示四秒之後執行js程式碼,只會執行一次
            window.setTimeout("alert('abc');",4000);
          ** clearInterval(): 清除setInterval設定的定時器
            var id1 = setInterval("alert('123');",3000);//通過setInterval會有一個返回值
            clearInterval(id1);

          ** clearTimeout() : 清除setTimeout設定的定時器
            var id2 = setTimeout("alert('abc');",4000);
            clearTimeout(id2);

8、js的dom對 象(****)

  * dom:document object model: 文件物件模型
    ** 文件:
      超文字文件(超文字標記文件) html 、xml
    ** 物件:
      提供了屬性和方法
    ** 模型:使用屬性和方法操作超文字標記型文件

    *** 可以使用js裡面的dom裡面提供的物件,使用這些物件的屬性和方法,對標記型文件進行操作

    *** 想要對標記型文件進行操作,首先需要 對標記型文件裡面的所有內容封裝成物件
      -- 需要把html裡面的標籤、屬性、文字內容都封裝成物件
    *** 要想對標記型文件進行操作,解析標記型文件

      - 畫圖分析,如何使用dom解析html

    *** 解析過程
      根據html的層級結構,在記憶體中分配一個樹形結構,需要把html中的每部分封裝成物件,
      - document物件:整個文件
      - element物件:標籤物件
      - 屬性物件
      - 文字物件

      -- Node節點物件:這個物件是這些物件的父物件
        *** 如果在物件裡面找不到想要的方法,這個時候到Node物件裡面去找

  DOM模型有三種:
    DOM level 1:將html文件封裝成物件。
    DOM level 2:在level 1的基礎上新增新的功能,例如:對於事件和css樣式的支援。
    DOM level 3:支援xml1.0的一些新特性。

  * DHTML:是很多技術的簡稱
  ** html: 封裝資料
  ** css:使用屬性和屬性值設定樣式
  ** dom:操作html文件(標記型文件)
  ** javascript:專門指的是js的語法語句(ECMAScript)

9、document物件

  * 表示整個的文件

  ** 常用方法
    **** write()方法:
    (1)向頁面輸出變數(值)
    (2)向頁面輸出html程式碼
       - var str = "abc";
      document.write(str);
      document.write("<hr/>");
    **** getElementById();
      - 通過id得到元素(標籤)
      - //使用getElementById得到input標籤
      var input1 = document.getElementById("nameid"); //傳遞的引數是標籤裡面的id的值
      //得到input裡面的value值 
      alert(input1.name); //標籤物件.屬性名稱
      //向input裡面設定一個值value
      input1.value = "bbbbb";
    **** getElementsByName();
      - 通過標籤的name的屬性值得到標籤
      - 返回的是一個集合(陣列)
      - //使用getElementsByName得到input標籤
        var inputs = document.getElementsByName("name1"); //傳遞的引數是 標籤裡面的name的值
      //alert(inputs.length);
      //遍歷陣列
        for(var i=0;i<inputs.length;i++) { //通過遍歷陣列,得到每個標籤裡面的具體的值
          var input1 = inputs[i]; //每次迴圈得到input物件,賦值到input1裡面
          alert(input1.value); //得到每個input標籤裡面的value值
      }
    **** getElementsByTagName("標籤名稱");
      - 通過標籤名稱得到元素
      - //演示getElementsByTagName
        var inputs1 = document.getElementsByTagName("input"); //傳遞的引數,是標籤名稱
        //alert(inputs1.length);
        //遍歷陣列,得到每個input標籤
        for(var m=0;m<inputs1.length;m++) {
          //得到每個input標籤
          var input1 = inputs1[m];
          //得到value值
          alert(input1.value);
        }

    **** 注意地方
    **** 只有一個標籤,這個標籤只能使用name獲取到,這個使用,使用getElementsByName返回的是一個數組,
    但是現在只有一個元素,這個時候不需要遍歷,而是可以直接通過陣列的下標獲取到值
    //通過name得到input標籤
      var inputs2 = document.getElementsByName("name11")[0];
      alert(inputs2.value);

      var inputss = document.getElementsByTagName("input")[0];
      alert(inputss.value);

10、案例:window彈窗案例

  - 實現過程
    1、建立一個頁面
      ** 有兩個輸入項和一個按鈕
      ** 按鈕上面有一個事件:彈出一個新視窗 open

    2、建立彈出頁面
      ** 表格
      ** 每一行有一個按鈕和編號和姓名
      ** 按鈕上有一個事件:把當前的編號和姓名,賦值到第一個頁面相應的位置

      ****//實現s1方法
        function s1(num1,name1) {
          //需要把num1和name1賦值到window頁面
          //跨頁面的操作 opener:得到建立這個視窗的視窗 得到window頁面
          var pwin = window.opener; //得到window頁面
          pwin.document.getElementById("numid").value = num1;
          pwin.document.getElementById("nameid").value = name1;
          //關閉視窗
          window.close();
        }

    -opener:屬性,獲取建立當前視窗的視窗

    - 做這個案例時候會有一個問題
      *** 由於我們現在訪問的是本地檔案,js安全性,谷歌瀏覽器安全級別很高,不允許訪問本地檔案
      *** 在實際開發中,沒有這樣的問題,實際中不可能訪問本地的檔案。
      *** http://www.baidu.com