JavaScript 參考教程

現在我們將開始討論更“實際”的話題——文檔對象(DOM)。文檔對象是指在網頁文檔裏劃分出來的對象。在 JavaScript 能夠涉及的範圍內有如下幾個“大”對象:window, document, location, navigator, screen, history 等。下面是一個文檔對象樹,你可以看到對象下包含對象的“壯觀”情景。要引用某個對象,就要把父級的對象都列出來。例如,要引用某表單 “applicationForm”的某文字框“customerName”,就要用 “document.applicationForm.customerName”。

下表中有些對象是全小寫的,有些是以大寫字母開頭的。以大寫字母開頭的對象表示,引用該對象不使用下表列出的名字,而直接用對象的“名字”(Id 或 Name,下面有講解),或用它所屬的對象數組指定。

這裏我們不準備講解對象的“事件”,雖然我們也會列出對象所能響應的事件。我們將會在下一章“事件處理 ”中講解事件。

瀏覽器對象
屏幕對象
窗口對象
 歷史對象
 地址對象
 框架對象
 文檔對象
  連接對象
  Java小程序對象
  插件對象
  表單對象
   按鈕對象
   複選框對象
   表單元素對象
   隱藏對象
   密碼輸入區對象
   單選域對象
   重置按鈕對象
   選擇區(下拉菜單、列表)對象
    選擇項對象
   提交按鈕對象
   文本框對象
   多行文本輸入區對象
  圖片對象

navigator 瀏覽器對象 反映了當前使用的瀏覽器的資料。

屬性

appCodeName 返回瀏覽器的“碼名”(?),流行的 IE 和 NN 都返回 'Mozilla'。
appName
返回瀏覽器名。IE 返回 'Microsoft Internet Explorer',NN 返回 'Netscape'。
appVersion
返回瀏覽器版本,包括了大版本號、小版本號、語言、操作平臺等信息。
platform
返回瀏覽器的操作平臺,對於 Windows 9x 上的瀏覽器,返回 'Win32'(大小寫可能有差異)。
userAgent
返回以上全部信息。例如,IE5.01 返回 'Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)'。
javaEnabled() 返回一個布爾值,代表當前瀏覽器允許不允許 Java。

screen 屏幕對象 反映了當前用戶的屏幕設置。

屬性

width 返回屏幕的寬度(像素數)。
height
返回屏幕的高度。
availWidth 返回屏幕的可用寬度(除去了一些不自動隱藏的類似任務欄的東西所佔用的寬度)。
availHeight 返回屏幕的可用高度。
colorDepth 返回當前顏色設置所用的位數 - 1:黑白;8:256色;16:增強色;24/32:真彩色

window 窗口對象 最大的對象,它描述的是一個瀏覽器窗口。一般要引用它的屬性和方法時,不需要用“window.xxx”這種形式,而直接使用“xxx”。一個框架頁面也 是一個窗口。

屬性

name 窗口的名稱,由打開它的連接(<a target="...">)或框架頁(<frame name="...">)或某一個窗口調用的 open() 方法(見下)決定。一般我們不會用這個屬性。
status 指窗口下方的“狀態欄”所顯示的內容。通過對 status 賦值,可以改變狀態欄的顯示。
opener 用法:window.opener;返回打開本窗口的窗口對象。注意:返回的是一個窗口對象。如果窗口不是由其他窗口打開的,在 Netscape 中這個屬性返回 null;在 IE 中返回“未定義”(undefined)。undefined 在一定程度上等於 null。注意:undefined 不是 JavaScript 常數,如果你企圖使用“undefined”,那就真的返回“未定義”了。
self 指窗口本身,它返回的對象跟 window 對象是一模一樣的。最常用的是“self.close()”,放在<a>標記中:“<a href="javascript:self.close()">關閉窗口</a>”。
parent 返回窗口所屬的框架頁對象。
top 返回佔據整個瀏覽器窗口的最頂端的框架頁對象。
history 歷史對象,見下
location 地址對象,見下
document 文檔對象,見下

方法

open() 打開一個窗口。用法:open(<URL字符串>, <窗口名稱字符串>, <參數字符串>);
  <URL字符串>:描述所打開的窗口打開哪一個網頁。如果留空(''),則不打開任意網頁。
   <窗口名稱字符串>:描述被打開的窗口的名稱(window.name),可以使用'_top'、'_blank'等內建名稱。這裏的名稱 跟“<a href="..." target="...">”裏的“target”屬性是一樣的。
  <參數字符 串>:描述被打開的窗口的樣貌。如果只需要打開一個普通窗口,該字符串留空(''),如果要指定樣貌,就在字符串裏寫上一到多個參數,參數之間用逗 號隔開。

例:打開一個 400 x 100 的乾淨的窗口:
open('','_blank','width=400,height=100,menubar=no,toolbar=no,
location=no,directories=no,status=no,scrollbars=yes,resizable=yes')

參數

 
top=# 窗口頂部離開屏幕頂部的像素數
left=# 窗口左端離開屏幕左端的像素數
width=# 窗口的寬度
height=# 窗口的高度
menubar=... 窗口有沒有菜單,取值yes或no
toolbar=... 窗口有沒有工具條,取值yes或no
location=... 窗口有沒有地址欄,取值yes或no
directories=... 窗口有沒有連接區,取值yes或no
scrollbars=... 窗口有沒有滾動條,取值yes或no
status=... 窗口有沒有狀態欄,取值yes或no
resizable=... 窗口給不給調整大小,取值yes或no

open() 方法有返回值,返回的就是它打開的窗口對象。所以,

var newWindow = open('','_blank');

這樣把一個新窗口賦值到“newWindow”變量中,以後通過“newWindow”變量就可以控制窗口了。

close()  關閉一個已打開的窗口。
用法:window.close() 或 self.close():關閉本窗口;
    <窗口對象>.close():關閉指定的窗口。
  如果該窗口有狀態欄,調用該方法後瀏覽器會警告:“網頁正在試圖關閉窗口, 是否關閉?”然後等待用戶選擇是否;如果沒有狀態欄,調用該方法將直接關閉窗口。
blur()
 使焦點從窗口移走,窗口變爲“非活 動窗口”。
focus()
 是窗口獲得焦點,變爲“活動窗口”。不過在 Windows 98,該方法只能使窗口的標題欄和任務欄上的相應按鈕閃爍,提示用戶該窗口正在試圖獲得焦點。
scrollTo()
 用法: [<窗口對象>.]scrollTo(x, y);使窗口滾動,使文檔從左上角數起的(x, y)點滾動到窗口的左上角。
scrollBy()
 用 法:[<窗口對象>.]scrollBy(deltaX, deltaY);使窗口向右滾動 deltaX 像素,向下滾動 deltaY 像素。如果取負值,則向相反的方向滾動。
resizeTo()
 用法:[<窗口對 象>.]resizeTo(width, height);使窗口調整大小到寬 width 像素,高 height 像素。
resizeBy()
 用 法:[<窗口對象>.]resizeBy(deltaWidth, deltaHeight);使窗口調整大小,寬增大 deltaWidth 像素,高增大 deltaHeight 像素。如果取負值,則減少。
alert() 用法:alert(<字符串>);彈出一個只包含“確定”按鈕的對話框,顯示<字符串>的內容,整個文檔的讀取、Script 的運行都會暫停,直到用戶按下“確定”。
confirm() 用法:confirm(<字符串>);彈出一個包含“確定”和“取消”按鈕的對話框,顯示<字符串>的內容,要求用戶做出選擇, 整個文檔的讀取、Script 的運行都會暫停。如果用戶按下“確定”,則返回 true 值,如果按下“取消”,則返回 false 值。
prompt() 用法:prompt(<字符串>[, <初始值>]);彈出一個包含“確認”“取消”和一個文本框的對話框,顯示<字符串>的內容,要求用戶在文本框輸入一些數據,整 個文檔的讀取、Script 的運行都會暫停。如果用戶按下“確認”,則返回文本框裏已有的內容,如果用戶按下“取消”,則返回 null 值。如果指定<初始值>,則文本框裏會有默認值。

事件

onload ; onunload ; onresize ; onblur ; onfocus ; onerror

history 歷史對象 歷史對象指瀏覽器的瀏覽歷史。鑑於安全性的需要,該對象收到很多限制,現在只剩下下列屬性和方法。

屬性

length 歷史的項數。JavaScript 所能管到的歷史被限制在用瀏覽器的“前進”“後退”鍵可以去到的範圍。本屬性返回的是“前進”和“後退”兩個按鍵之下包含的地址數的和。

方法

back() 後退,跟按下“後退”鍵是等效的。
forward()
前進,跟按下“前進”鍵是等效的。
go() 用法:history.go(x);在歷史的範圍內去到指定的一個地址。如果 x < 0,則後退 x 個地址,如果 x > 0,則前進 x 個地址,如果 x == 0,則刷新現在打開的網頁。history.go(0) 跟 location.reload() 是等效的。

location 地址對象 它描述的是某一個窗口對象所打開的地址。要 表示當前窗口的地址,只需要使用“location”就行了;若要表示某一個窗口的地址,就使用“<窗口對象>.location”。

注意 屬於不同協議或不同主機的兩個地址之間不能互相引用對方的 location 對象,這是出於安全性的需要。例如,當前窗口打開的是“www.a.com”下面的某一頁,另外一個窗口(對象名爲:bWindow)打開的是 “www.b.com”的網頁。如果在當前窗口使用“bWindow.location”,就會出錯:“沒有權限”。這個錯誤是不能用錯誤處理程序 (Event Handler,參閱 onerror 事件)來接收處理的。

屬性

protocol 返回地址的協議,取值爲 'http:','https:','file:' 等等。
hostname
返回地址的主機名,例如,一個“http://www.microsoft.com/china/”的地址,location.hostname == 'www.microsoft.com'。
port
返回地址的端口號,一般 http 的端口號是 '80'。
host
返回主機名和端口號,如:'www.a.com:8080'。
pathname
返回路徑名,如“http://www.a.com/b/c.html”,location.pathname == 'b/c.html'。
hash
返回“#”以及以後的內容,如“http://www.a.com/b/c.html#chapter4”,location.hash == '#chapter4';如果地址裏沒有“#”,則返回空字符串。
search
返回“?”以及以後的內容,如“http://www.a.com/b/c.asp?selection=3& jumpto=4”,location.search == '?selection=3&jumpto=4';如果地址裏沒有“?”,則返回空字符串。
href
返回以上全部內容,也就是說,返回整個地址。在瀏覽器的地址欄上怎麼顯示它就怎麼返回。如果想一個窗口對象打開某地址,可以使用 “location.href = '...'”,也可以直接用“location = '...'”來達到此目的。

方法

reload() 相當於按瀏覽器上的“刷新”(IE)或“Reload”(Netscape)鍵。
replace()
打開一個 URL,並取代歷史對象中當前位置的地址。用這個方法打開一個 URL 後,按下瀏覽器的“後退”鍵將不能返回到剛纔的頁面。

frames[]; Frame 框架對象 請參閱“使用框架和 Cookies ” 一章。

document 文檔對象 描述當前窗口或指定窗口對象的文檔。它包含 了文檔從<head>到</body>的內容。
  用法:document (當前窗口)
   或 <窗口對象>.document (指定窗口)

屬性

cookie 關於 cookie 請參看“使用框架和 Cookies ” 一章。
lastModified
當前文檔的最後修改日期,是一個 Date 對象。
referrer
如果當前文檔是通過點擊連接打開的,則 referrer 返回原來的 URL。
title
指<head>標記裏用<title>...</title>定義的文字。在 Netscape 裏本屬性不接受賦值。
fgColor 指<body>標記的 text 屬性所表示的文本顏色。
bgColor 指<body>標記的 bgcolor 屬性所表示的背景顏色。
linkColor
指<body>標記的 link 屬性所表示的連接顏色。
alinkColor
指<body>標記的 alink 屬性所表示的活動連接顏色。
vlinkColor
指<body>標記的 vlink 屬性所表示的已訪問連接顏色。

方法

open() 打開文檔以便 JavaScript 能向文檔的當前位置(指插入 JavaScript 的位置)寫入數據。通常不需要用這個方法,在需要的時候 JavaScript 自動調用。
write(); writeln()
向文檔寫入數據,所寫入的會當成標準文檔 HTML 來處理。writeln() 與 write() 的不同點在於,writeln() 在寫入數據以後會加一個換行。這個換行只是在 HTML 中換行,具體情況能不能夠是顯示出來的文字換行,要看插入 JavaScript 的位置而定。如在<pre>標記中插入,這個換行也會體現在文檔中。
clear() 清空當前文檔。
close() 關閉文檔,停止寫入數據。如果用了 write[ln]() 或 clear() 方法,就一定要用 close() 方法來保證所做的更改能夠顯示出來。如果文檔還沒有完全讀取,也就是說,JavaScript 是插在文檔中的,那就不必使用該方法。

現在我們已經擁有足夠的知識來做以下這個很多網站都有的彈出式更新通知了。

<script language="JavaScript">
<!--
var whatsNew = open('','_blank','top=50,left=50,width=200,height=300,' +
                'menubar=no,toolbar=no,directories=no,location=no,' +
                'status=no,resizable=no,scrollbars=yes');
whatsNew.document.write('<center><b> 更新通知</b></center>');
whatsNew.document.write('<p>最後 更新日期:00.08.01');
whatsNew.document.write('<p>00.08.01:增加了“我的最愛” 欄目。');
whatsNew.document.write('<p align="right">' +
                '<a href="javascript:self.close()">關閉窗口</a>');
whatsNew.document.close();
-->
</script>

當然也可以先寫好一個 HTML 文件,在 open() 方法中直接 load 這個文件。

anchors[]; links[]; Link 連接對象

用法:document.anchors[ [x]] ; document.links[ [x]] ; <anchorId>; <linkId>
  document.anchors 是一個數組,包含了文檔中所有錨標記(包含 name 屬性的<a>標記),按照在文檔中的次序,從 0 開始給每個錨標記定義了一個下標。
   document.links 也是一個數組,包含了文檔中所有連接標記(包含 href 屬性的<a>標記和<map>標記段裏的<area>標記),按照在文檔中的次序,從 0 開始給每個連接標記定義了一個下標。
  如果一個<a>標記既有 name 屬性,又有 href 屬性,則它既是一個 Anchor 對象,又是一個 Link 對象。
  在 IE 中,如果在<a>標記中添加“id="..."”屬性,則這個<a>對象被賦予一個標識(ID),調用這個對象的時候只需要使用 “<id>”就行了。很多文檔部件都可以用這個方法來賦予 ID,但要注意不能有兩個 ID 相同。

anchors 和 links 作爲數組,有數組的屬性和方法。單個 Anchor 對象沒有屬性;單個 Link 對象的屬性見下。

屬性

protocol; hostname; port; host; pathname; hash; search; href 與 location 對象相同。
target
返回/指定連接的目標窗口(字符串),與<a>標記裏的 target 屬性是一樣的。

事件

onclick ; onmouseover ; onmouseout ; onmousedown ; onmouseup

applets[] Java小程序對象 它是一個數組,包含了文檔中所有的 Applet 對象(Java 小程序)。作爲一個數組,有數組的屬性和方法。關於單個 Applet 對象的屬性和方法,我引用一句話:“Applet 對象繼承了 Java 小程序的所有公共屬性和方法。”(英文原句:The Applet object inherits all public properties of the Java applet./The Applet object inherits all public methodss of the Java applet.) 因爲本人很厭惡 Java 小程序,所以對它的什麼“公共”“私有”的問題不感興趣,也就沒有探討了。

embeds[] 插件對象 它是一個數組,包含了文檔中所有的插件 (<embed>標記)。因爲每個插件的不同,每個 Embed 對象也有不同的屬性和方法。

forms[]; Form 表單對象 document.forms[] 是一個數組,包含了文檔中所有的表單(<form>)。要引用單個表單,可以用 document.forms[x],但是一般來說,人們都會這樣做:在<form>標記中加上“name="..."”屬性,那麼直接用 “document.<表單名>”就可以引用了。

Form 對象的屬性

name 返回表單的名稱,也就是<form name="...">屬性。
action
返回/設定表單的提交地址,也就是<form action="...">屬性。
method 返回/設定表單的提交方法,也就是<form method="...">屬性。
target 返回/設定表單提交後返回的窗口,也就是<form target="...">屬性。
encoding 返回/設定表單提交內容的編碼方式,也就是<form enctype="...">屬性。
length 返回該表單所含元素的數目。

方法

reset() 重置表單。這與按下“重置”按鈕是一樣的。
submit() 提交表單。這與按下“提交”按鈕是一樣的。

事件

onreset ; onsubmit

以下從“Button”到“Textarea”都是表單的元素對象。

Button 按鈕對象 由“<input type="button">”指定。引用一個 Button 對象,可以使用“<文檔對象>.<表單對象>.<按鈕名稱>”。<按鈕名稱>指 在<input>標記中的“name="..."”屬性的值。引用任意表單元素都可以用這種方法。

屬性

name 返回/設定用<input name="...">指定的元素名稱。
value
返回/設定用<input value="...">指定的元素的值。
form 返回包含本元素的表單對象。

方法

blur() 從對象中移走焦點。
focus() 讓對象獲得焦點。
click() 模擬鼠標點擊該對象。

事件

onclick ; onmousedown ; onmouseup

Checkbox 複選框對象 由“<input type="checkbox">”指定。

屬性

name 返回/設定用<input name="...">指定的元素名稱。
value
返回/設定用<input value="...">指定的元素的值。
form 返回包含本元素的表單對象。
checked 返回/設定該複選框對象是否被選中。這是一個布爾值。
defaultChecked 返回/設定該複選框對象默認是否被選中。這是一個布爾值。

方法

blur() 從對象中移走焦點。
focus()
讓對象獲得焦點。
click() 模擬鼠標點擊該對象。

事件

onclick

elements[]; Element 表單元素對象 <表單對象>.elements 是一個數組,包含了該表單所有的對象。一般我們不用該數組,而直接引用各個具體的對象。

Hidden 隱藏對象 由“<input type="hidden">”指定。

屬性

name 返回/設定用<input name="...">指定的元素名稱。
value
返回/設定用<input value="...">指定的元素的值。
form
返回包含本元素的表單對象。

Password 密碼輸入區對象 由“<input type="password">”指定。

屬性

name 返回/設定用<input name="...">指定的元素名稱。
value
返回/設定密碼輸入區當前的值。
defaultValue
返回用<input value="...">指定的默認值。
form
返回包含本元素的表單對象。

方法

blur() 從對象中移走焦點。
focus()
讓對象獲得焦點。
select() 選中密碼輸入區裏全部文本。

事件

onchange

Radio 單選域對象 由“<input type="radio">”指定。一組 Radio 對象有共同的名稱(name 屬性),這樣的話,document.formName.radioName 就成了一個數組。要訪問單個 Radio 對象就要用:document.formName.radioName[x]。

單個 Radio 對象的屬性

name 返回/設定用<input name="...">指定的元素名稱。
value
返回/設定用<input value="...">指定的元素的值。
form
返回包含本元素的表單對象。
checked
返回/設定該單選域對象是否被選中。這是一個布爾值。
defaultChecked
返回/設定該對象默認是否被選中。這是一個布爾值。

方法

blur() 從對象中移走焦點。
focus()
讓對象獲得焦點。
click()
模擬鼠標點擊該對象。

事件

onclick

Reset 重置按鈕對象 由“<input type="reset">”指定。因爲 Reset 也是按鈕,所以也有 Button 對象 的屬性和方法。至於“onclick”事件,一般用 Form 對象的 onreset 代替。

Select 選擇區(下拉菜單、列表)對象 由 “<select>”指定。

屬性

name 返回/設定用<input name="...">指定的元素名稱。
length
返回 Select 對象下選項的數目。
selectedIndex
返回被選中的選項的下標。這個下標就是在 options[] 數組中該選項的位置。如果 Select 對象允許多項選擇,則返回第一個被選中的選項的下標。
form
返回包含本元素的表單對象。

方法

blur() 從對象中移走焦點。
focus()
讓對象獲得焦點。

事件

onchange

options[]; Option 選擇項對象 options[] 是一個數組,包含了在同一個 Select 對象下的 Option 對象。Option 對象由“<select>”下的“<options>”指定。

options[] 數組的屬性

length; selectedIndex 與所屬 Select 對象的同名屬性相同。

單個 Option 對象的屬性

text 返回/指定 Option 對象所顯示的文本
value
返回/指定 Option 對象的值,與<options value="...">一致。
index
返回該 Option 對象的下標。對此並沒有什麼好說,因爲要指定特定的一個 Option 對象,都要先知道該對象的下標。這個屬性好像沒有什麼用。
selected
返回/指定該對象是否被選中。通過指定 true 或者 false,可以動態的改變選中項。
defaultSelected 返回該對象默認是否被選中。true / false。

Submit 提交按鈕對象 由“<input type="submit">指定。因爲 Submit 也是按鈕,所以也有 Button 對象 的屬性和方法。至於“onclick”事件,一般用 Form 對象的 onsubmit 代替。

Text 文本框對象 由“<input type="text">”指定。Password 對象也是 Text 對象的一種,所以 Password 對象 所有的屬性、方法和事件,Text 對象都有。

Textarea 多行文本輸入區對象 由 “<textarea>”指定。Textarea 對象所有的屬性、方法和事件和 Text 對象 相同,也就是跟 Password 對象 一樣。

images[]; Image 圖片對象 document.images[] 是一個數組,包含了文檔中所有的圖片(<img>)。要引用單個圖片,可以用 document.images[x]。如果某圖片包含“name”屬性,也就是用“<img name="...">”這種格式定義了一幅圖片,就可以使用“document.images['...']”這種方法來引用圖片。在 IE 中,如果某圖片包含 ID 屬性,也就是用“<img id="...">”這種格式定義了一幅圖片,就可以直接使用“<imageID>”來引用圖片。

單個 Image 對象的屬性

name; src; lowsrc; width; height; vspace; hspace; border 這些屬性跟<img>標記裏的同名屬性是一樣的。在 Netscape 裏,除了 src 屬性,其它屬性(幾乎全部)都不能改的,即使改了,在文檔中也不能顯示出效果來。這些屬性最有用的就是 src 了,通過對 src 屬性賦值,可以實時的更改圖片。

事件

onclick

不顯示在文檔中的 Image 對象

不顯示在文檔中的 Image 對象是用 var 語句定義的:

var myImage = new Image(); 或
var myImage = new Image(<圖片地址字符串>);

然後就可以像一般 Image 對象一樣對待 myImage 變量了。不過既然它不顯示在文檔中,以下屬性:lowsrc, width, height, vspace, hspace, border 就沒有什麼用途了。一般這種對象只有一個用:預讀圖片(preload)。因爲當對對象的 src 屬性賦值的時候,整個文檔的讀取、JavaScript 的運行都暫停,讓瀏覽器專心的讀取圖片。預讀圖片以後,瀏覽器的緩存裏就有了圖片的 Copy,到真正要把圖片放到文檔中的時候,圖片就可以立刻顯示了。現在的網頁中經常會有一些圖像連接,當鼠標指向它的時候,圖像換成另外一幅圖像,它們 都是先預讀圖像的。

預讀圖像的 JavaScript 例子

var imagePreload = new Image();

imagePreload.src = '001.gif';
imagePreload.src = '002.gif';
imagePreload.src = '003.gif';

以上例子適合預讀少量圖片。

function imagePreload() {
  var imgPreload = new Image();
  for (i = 0; i < arguments.length; i++) {
    imgPreload.src = arguments[i];
  }
}

imagePreload('001.gif', '002.gif', '003.gif', '004.gif', '005.gif');

以上例子適合預讀大

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