1. 程式人生 > >第2章 JavaScript操作DOM物件

第2章 JavaScript操作DOM物件

2.1 window物件

瀏覽器物件模型(BOM)是JavaScript的組成之一,它提供了獨立於內容與瀏覽器視窗進行互動的物件,使用瀏覽器物件模型可以實現與HTML的互動。它的作用是將相關的元素組織包裝起來,提供給程式設計人員使用,從而降低開發人員的勞動量,提高設計Web頁面的能力。

BOM的分層結構:

window:history document location

document:link form anchor

form:button checkbox text …… textarea radio select

window物件是整個BOM的核心,在瀏覽器中開啟網頁後,首先看到的是瀏覽器視窗,即頂層的window物件;其次是網頁文件內容,即document(文件)。它的內容包括一些超連結(link)、表單(form)、錨(anchor)等,表單由文字框(text)、單選按鈕(radio)、按鈕(button)等表單元素組成。在瀏覽器物件結構中,除了document物件外,window物件之下還有兩個物件:地址物件(location)和歷史物件(history),它們對應於瀏覽器位址列和前進/後退按鈕。

使用BOM可以實現的功能:

→ 彈出新的瀏覽器視窗

→ 移動、關閉瀏覽器視窗及調整視窗的大小

→ 在瀏覽器視窗中實現頁面的前進、後退功能

window物件也稱為瀏覽器物件。當瀏覽器開啟HTML文件時,通常會建立一個window物件,如果文件定義了一個或多個框架時,瀏覽器將為原始文件建立一個window物件,同時為每個框架另外建立一個window物件。

2.1.1 常用的屬性

window物件的常用屬性

名稱

說明

history

有關客戶訪問過的URL的資訊

location

有關當前URL的資訊

screen

只讀屬性,包含有關客戶端顯示螢幕的資訊

語法:

window.屬性名=”屬性值”

例:window.location=”http://www.baidu.com”,表示跳轉到百度搜索頁面;screen.height返回顯示瀏覽器的螢幕的高度,單位為畫素。

2.1.2 常用的方法

window物件的常用方法

名稱

說明

prompt()

顯示可提示使用者輸入的對話方塊

alert()

顯示一個帶有提示資訊和一個“確定”按鈕的警示對話方塊

confirm()

顯示一個帶有提示資訊、“確定”和“取消”按鈕的對話方塊

close()

關閉瀏覽器視窗

open()

開啟一個新的瀏覽器視窗,載入給定URL所指定的文件

setTimeout()

在指定的毫秒數後呼叫函式或計算表示式

setInterval()

按照指定的週期(以毫秒計)來呼叫函式或表示式

語法:

window.方法名();

window物件是全域性物件,所以在使用window物件的屬性和方法時,window可以省略。例:使用的alert(),相當於寫成了window.alert()。

1、 confirm()

confirm()將彈出一個確認對話方塊。

語法:

window.confirm(“對話方塊中顯示的純文字”);

confirm()彈出的確認對話方塊中,有一條提示資訊、一個“確定”按鈕和一個“取消”按鈕。如果使用者單擊“確定”按鈕,則confirm()返回true;如果單擊“取消”按鈕,則confirm()返回false。

在使用者單擊“確定”按鈕或“取消”按鈕將對話方塊關閉之前,它將阻止使用者對瀏覽器的所有操作,也就是說,當呼叫confirm()時,在使用者做出應答(單擊按鈕或關閉對話方塊)之前,不會執行下一條語句。

☆示例

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>確認對話方塊</title>
</head>
<body>
    <script type="text/javascript">
        var flag=confirm("確認要刪除此條資訊嗎?");
        if(flag==true){
            alert("刪除成功!");
        }else{
            alert("你取消了刪除");
        }
    </script>
</body>
</html>

在瀏覽器中執行

如果單擊“確定”按鈕

 

如果單擊“取消”按鈕

 

prompt()方法、alert()方法和confirm()方法的異同:

相同處:它們都是在頁面上彈出對話方塊

不同處:作用不相同。

→ alert()只要一個引數,僅顯示警告對話方塊的資訊,無返回值,不能對指令碼產生任何改變。

→ prompt()有兩個引數,是輸入對話方塊,用來提示使用者輸入一些資訊,單擊“取消”按鈕則返回null,單擊“確定”按鈕則返回使用者輸入的值,常用於收集使用者關於特定問題而反饋的資訊。

→ confirm()只有一個引數,是確認對話方塊,顯示提示對話方塊的訊息、“確定”按鈕和“取消”按鈕,單擊“確定”按鈕返回true,單擊“取消”按鈕返回false,因此與if-else語句搭配使用。

2、 close()

close()方法用於關閉瀏覽器視窗。

語法:

window.close();

close()方法可用在網站頁面中可以對當前視窗進行關閉的按鈕。

3、 open()

在頁面上彈出一個新的瀏覽器視窗。

語法:

window.open(“彈出視窗的url”,”視窗名稱”,”視窗特徵”)

視窗的特徵屬性

名稱

說明

height、width

視窗文件顯示區的高度、寬度,以畫素計

left、top

視窗的x座標、y座標,以畫素計

toolbar=yes|no|1|0

是否顯示瀏覽器的工具欄,預設是yes

scrollbars=yes|no|1|0

是否顯示滾動條,預設是yes

location=yes|no|1|0

是否顯示位址列,預設是yes

status=yes|no|1|0

是否新增狀態列,預設是yes

menubar=yes|no|1|0

是否顯示選單欄,預設是yes

resizable=yes|no|1|0

視窗是否可調節尺寸,預設是yes

titlebar=yes|no|1|0

是否顯示標題欄,預設是yes

fullscreen=yes|no|1|0

是否使用全屏模式顯示瀏覽器,預設是no

open()方法通常用在開啟一個網頁彈出廣告頁面或網站的資訊宣告頁面等。

2.2 history物件與location物件

2.2.1 history物件

history物件提供使用者最近瀏覽過的URL列表。但出於隱私方面的原因,history物件不再允許指令碼訪問已經訪問過的實際URL,可以使用history物件提供的逐個返回訪問過的頁面方法。

history物件的方法

名稱

描述

back()

載入history物件列表中的前一個URL

forward()

載入history物件列表中的後一個URL

go()

載入history物件列表中的某個具體URL

→ back()方法會讓瀏覽器載入前一個瀏覽過的文件,history.back()等效於瀏覽器中的“後退”按鈕。

→ forward()方法會讓瀏覽器載入後一個瀏覽過的文件,history.forward()等效於瀏覽器中的“前進”按鈕。

→ go(n)方法中的n是一個具體的數字,當n>0時,裝入歷史列表中往前數的第n個頁面;當n=0時,裝入當前頁面;當n<0時,裝入歷史列表中往後數的第n個頁面。

◇history.go(1)代表前進1頁,相當於瀏覽器中的“前進”按鈕,等價於forward()方法。

◇history.go(-1)代表後退1頁,相當於瀏覽器中的“後退”按鈕,等價於back()方法。

2.2.2 location物件

location物件提供當前頁面的URL資訊,並且可以重新裝載當前頁面或裝入新頁面。

location物件的屬性

名稱

描述

host

設定或返回主機名和當前URL的埠號

hostname

設定或返回當前URL的主機名

href

設定或返回完整的URL

 

location物件的方法

名稱

描述

reload()

重新載入當前文件

replace()

用新的文件替換當前文件

location物件常用的屬性是href,通過對此屬性設定不同的網址,可以實現跳轉功能。也可以直接寫成location=”url”來實現頁面跳轉,省略了href。

使用<a href=”url”>的方法實現頁面跳轉,是固定頁面;location物件的href屬性可以動態地改變連結的頁面。

2.3 document物件

document物件既是window物件的一部分,又代表了整個HTML文件,可用來訪問頁面中的所有元素。所以在使用document物件時,除了要適用於各瀏覽器外,也要符合W3C(全球資訊網聯盟)的標準。

2.3.1 document物件的常用屬性

document物件的常用屬性

屬性

描述

referrer

返回載入當前文件的URL

URL

返回當前文件的URL

referrer語法:

document.referrer

當前文件如果不是通過超連結訪問的,則document.referrer的值為null。

URL語法:

document.URL

上網瀏覽某個頁面時,由於不是由指定的頁面進入的,因此係統將會提醒不能瀏覽本頁面或者直接跳轉到其他頁面,這樣的功能實際上就是通過referrer屬性來實現的。

☆示例

index.html頁面關鍵程式碼:
<body>
    <h1><a href="示例4-praise.html">馬上去領獎啦!</a></h1>
</body>
</html>

在index.html中單擊“馬上去領獎啦!”連結,進入praise.html頁面,在praise.html頁面中使用referrer屬性獲得連結進入本頁的頁面地址,然後判斷是否從領獎頁面進入,如果不是,則頁面自動跳轉到登入頁面(login.html),praise.html頁面關鍵程式碼:

<body>
<script type="text/javascript">
    var preUrl = document.referrer;//載入本頁面文件的地址
    if(preUrl==""){
        document.write("<h2>您不是從領獎頁面進入,5秒後將自動跳轉到登入頁面</h2>")
        setTimeout("location.href='示例4-login.html'",5000);//使用setTimeout延遲5秒後自動跳轉
    }else{
        document.write("<h2>大獎趕快拿啦!筆記本!數碼相機!</h2>");
    }
</script>
</body>

注意praise.html頁面的關鍵程式碼中使用setTimeout()是定時函式,作用是延遲5秒後自動跳轉到login.html。

如果HTML頁面直接在本地執行,則無論是否從本頁面進入,referrer獲取的地址都將是一個空字串,因此需要在伺服器環境下開啟HTML頁面。

提示:由於webStorm具有模擬網站伺服器的功能,因此使用webStorm開啟index.html頁面,單擊“馬上去領獎啦!”連結,進入praise.html頁面,才能夠獲取當前文件的url。

2.3.2 document物件的常用方法

document物件的常用方法

方法

描述

getElementById()

返回對擁有指定id的第一個物件的引用

getElementsByName()

返回帶有指定名稱的物件的集合

getElementsByTagName()

返回帶有指定標籤名的物件的集合

write()

向文件寫文字、HTML表示式或JavaScript程式碼

→ getElementById()方法一般用於訪問div、圖片、表單元素、網頁標籤等,但要求訪問物件的id是唯一的。

→ getElementsByName()方法與getElementById()方法相似,但它訪問的是具體name屬性的元素,由於一個文件中的name屬性可能不唯一,因此getElementsByName()方法一般用於訪問一組相同name屬性的元素,如具有相同name屬性的單選按鈕、複選框等。

→ getElementsByTagName()方法是按標籤來訪問頁面元素的,一般用於訪問一組相同的元素,如一組<input>、一組圖片等。

☆示例

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>島上書店</title>
</head>
<body>
    <div class="content">
        <div id="book">書名:島上書店</div>
        <input type="button" name="changeBox" value="換換名稱" onclick="alterBook()";/>
        <br/>四季名稱:
        <input type="text" name="season" value=""/>
        <input type="text" name="season" value=""/>
        <input type="text" name="season" value=""/>
        <input type="text" name="season" value=""/><br/><br/>
        <input name="b2" type="button" value="input內容" onclick="all_input()"/>
        <input name="b3" type="button" value="四季名稱" onclick="s_input()"/>
        <input name="b4" type="button" value="清空頁面內容" onclick="clearAll()"/>
        <p id="replace"></p>
    </div>
    <script type="text/javascript">
        function alterBook(){
            document.getElementById("book").innerHTML="現象級全球暢銷書";
        }
        function all_input(){
            var aInput = document.getElementsByTagName("input");
            var sStr = "";
            for(var i=0;i<aInput.length;i++){
                sStr+=aInput[i].value+"  ";
            }
            document.getElementById("replace").innerHTML=sStr;
        }
        function s_input(){
            var aInput = document.getElementsByName("season");
            var sStr = "";
            for(var i=0;i<aInput.length;i++){
                sStr+=aInput[i].value+"  ";
            }
            document.getElementById("replace").innerHTML=sStr;
        }
        function clearAll(){
            document.write("");
        }
    </script>
</body>
</html>

提示innerHTML是幾乎所有的HTML元素都有的屬性。它是一個字串,用來設定或獲取當前物件的開始標籤和結束標籤之間的HTML。

2.4 JavaScript內建物件

JavaScript中,系統的內建物件有Date物件、Array物件、String物件和Math物件等。

→ Date:用於操作日期和時間。

→ Array:用於在單獨的變數名中儲存一系列的值。

→ String:用於支援對字串的處理。

→ Math:使我們有能力執行常用的數學任務,它包含了若干個數字常量和函式。                         

2.4.1 Date物件

語法:

var 日期例項 = new Date(引數);

日期例項是儲存Date物件的變數。可以省略引數,如果沒有引數,則表示當前日期和時間,例:var today = new Date();//將當前日期和時間儲存在變數today中。

引數是字串格式“MM DD, YYYY, hh:mm:ss”,表示日期和時間,例:var tdate = new Date(“July 15, 2013,16:34:28”);。

Date物件有大量用於設定、獲取和操作日期的方法,從而實現在頁面中顯示不同型別的日期時間。其中最常用的是獲取日期的方法。

Date物件的常用方法

方法

說明

getDate()

返回Date物件的一個月中的每一天,其值為1~31

getDay()

返回Date物件的星期中的每一天,其值為0~6

getHours()

返回Date物件的小時數,其值為0~23

getMinutes()

返回Date物件的分鐘數,其值為0~59

getSeconds()

返回Date物件的秒數,其值為0~59

getMonth()

返回Date物件的月份,其值為0~11

getFullYear()

返回Date物件的年份,其值為四位數

getTime()

返回自某一時刻(1970年1月1日)以來的毫秒數

→ getFullYear()返回四位數的年份,getYear()返回二位或四位的年份,常用於獲取年份getFullYear()。

獲取星期幾使用getDay():0表示週日,1表示週一,6表示週六。

各部分時間表示的範圍:除號數(一個月中的每一天)外,其他均從0開始計時。例如,月份0~11,0表示1月份,11表示12月份。

☆示例

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>時鐘特效</title>
</head>
<body>
    <div id="myclock"></div>
    <script type="text/javascript">
        function disptime(){
            var today = new Date();//獲得當前時間
            var hh = today.getHours();//獲得小時
            var mm = today.getMinutes();//獲得分鐘
            var ss = today.getSeconds();//獲得秒
            //設定div的內容為當前時間
            document.getElementById("myclock").innerHTML="現在是:"+hh+":"+mm+":"+ss;
        }
        disptime();
    </script>
</body>
</html>

 

2.4.2 Math物件

Math物件提供了許多與數學相關的功能,它是JavaScript的一個全域性物件,不需要建立,直接作為物件使用就可以呼叫其屬性和方法。

Math物件的常用方法

方法

說明

示例

ceil()

對數進行上舍入

Math.ceil(25.5);返回26

Math.ceil(-25.5);返回-25

floor()

對數進行下舍入

Math.floor(25.5);返回25

Math.floor(-25.5);返回-26

round()

把數四捨五入為最接近的數

Math.round(25.5);返回26

Math.round(-25.5);返回-26

random()

返回0~1中的隨機數

Math.random();例如,0.627360881412312

random()方法返回的隨機數包括0,不包含1,且都是小數,如果想選擇一個1~100中的整數(包括1和100),則程式碼如下:

var iNum = Math.floor(Math.random()*100+1);

如果希望返回的整數為2~99,只有98個數字,第一個值為2,則程式碼如下:

var iNum = Math.floor(Math.random()*98+2);

☆示例

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>使用ceil()和random()隨機選擇顏色</title>
</head>
<body>
    <div>
        本次選擇的顏色是:<span id="color"></span>
        <input type="button" value="選擇顏色" onclick="selColor();"/>
    </div>
    <script type="text/javascript">
        function selColor(){
            var color = new Array("紅色","黃色","藍色","綠色","橙色","青色","紫色");
            var num = Math.ceil(Math.random()*7)-1;
            document.getElementById("color").innerHTML=color[num];
        }
    </script>
</body>

 

2.5 定時函式

2.5.1 常用定時函式

1、setTimeout()

setTimeout()用於在指定的毫秒後呼叫函式或計算表示式。

語法:

setTimeout(“呼叫的函式名稱”,等待的毫秒數);

☆示例

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>定時函式</title>
</head>
<body>
<input name="s" type="button" value="顯示提示訊息" onclick="timer()"/>
<script type="text/javascript">
    function timer(){
        setTimeout("alert('3 seconds')",3000);
    }
</script>
</body>
</html>

→ 3000表示3000毫秒,即3秒。

→ 單擊“顯示提示訊息”按鈕呼叫timer()函式時,彈出一個警示對話方塊,由於使用了setTimeout()函式,因此呼叫函式timer()後,需要等待3秒,才能彈出警示對話方塊。

2、setInterval()

setInterval()可按照指定的週期(以毫秒計)來呼叫函式或計算表示式。

語法:

setInterval(“呼叫的函式名稱”,週期性呼叫函式之間間隔的毫秒數);

setInterval()會不停地呼叫函式,直到視窗被關閉或被其他方法強制停止。

經驗:setTimeout()只執行一次函式,如果要多次呼叫函式,則需要使用setInterval()或者讓被呼叫的函式再次呼叫setTimeout()。

3、clearTimeout()和clearInterval()

clearTimeout()函式用來清除由setTimeout()函式設定的定時器。

語法:

clearTimeout(setTimeout()返回的ID值);

clearInterval ()函式用來清除由setInterval()函式設定的定時器。

語法:

clearInterval(setInterval()返回的ID值);

 

 

補充:

1、 URL 統一資源定位符

2、 open(“彈出視窗的url,”視窗名稱”,”視窗特徵”)

特徵以“,”分隔

例:open(http://www.baidu.com,”百度搜索”, width=250,height=250,left=250,top=250”);

3、 對話方塊使用“\n”進行換行。

4、 屬性cursor

值:pointer:IE6.0和hand一樣。豎起一隻手指的手形游標。就像通常使用者將游標移到超連結上時那樣。

5、 表單元素,value,代表取值,value=內容,代表賦值。

普通元素,innerHTML可以用於賦值和取值操作。

賦值,例如:元素.innerHTML=內容,HTML標籤會被自動解析;

取值,例如:元素.innerHTML,會將該元素的內容全部獲取,HTML標籤頁會獲取展示。