js中瀏覽器物件(BOM)
4.8 JS瀏覽器物件(BOM)
BOM (Browser Object Model )瀏覽器物件模型,它是由多個JS物件共同組成的, JS是一種動態語言,它可以在頁面上做很多動作性的東西,比如:驗證表單,動態給網頁新增內容,動態修改網頁,但是網頁的內容通常都是由瀏覽器來進行解析,所以JS針對瀏覽器中解析網頁的一些物件,就被它封裝起來,供我們程式設計師來進行呼叫。
BOM由很多物件組成:
4.8.1 BOM物件的主要功能
- 在瀏覽中彈出新窗體
2、移動、關閉和更改瀏覽器視窗大小
3、提供WEB瀏覽器詳細資訊的導航物件
4、提供瀏覽器載入頁面的頁面詳細資訊的本地物件
- 提供使用者螢幕解析度詳細的螢幕物件
5、支援cookie
6、BOM還支援擴充套件使用ActiveX物件類
4.8.2文件物件模型(DOM)
DOM (HTML Document Object Model )文件物件模型的簡寫,DOM針對HTML網頁提供了一系列的標準方法,可以讓我們去操作HTML標記。所以我們可以把DOM看作是操作HTML頁面的API。
在JS中通過DOM來操作HTML標記時,它會先在記憶體中構建一棵完整的HTML結構樹。然後就可以實現通過該結構樹對HTML檔案做動態的訪問,以及修改。
4.8.2.1 Document 物件集合
集合 |
描述 |
提供對文件中所有 HTML 元素的訪問。 |
|
返回對文件中所有 Anchor 物件的引用。 |
|
applets |
返回對文件中所有 Applet 物件的引用。 |
返回對文件中所有 Form 物件引用。 |
|
返回對文件中所有 Image 物件引用。 |
|
返回對文件中所有 Area 和 Link 物件引用。 |
var nodes = document.all;//獲得頁面所有的節點資訊
console.log(nodes);
var forms = document.forms;//獲得頁面所有的表單資訊
console.log(forms);
console.log(forms[0]);
var links = document.links;//獲得頁面的所有使用area標記定義的圖片連結資訊
console.log(links);
var imags = document.images;//獲得頁面所有的影象資訊
console.log(imags);
4.8.2.2 Document 物件屬性
屬性 |
描述 |
body |
提供對 <body> 元素的直接訪問。 對於定義了框架集的文件,該屬性引用最外層的 <frameset>。 |
設定或返回與當前文件有關的所有 cookie。 |
|
返回當前文件的域名。 |
|
返回文件被最後修改的日期和時間。 |
|
返回載入當前文件的文件的 URL。 |
|
返回當前文件的標題。 |
|
返回當前文件的 URL。 |
例如:
console.log(document.URL);
console.log(document.title);
console.log(document.cookie);
console.log(document.domain);
4.8.2.3 Document 物件方法
方法 |
描述 |
關閉用 document.open() 方法開啟的輸出流,並顯示選定的資料。 |
|
返回對擁有指定 id 的第一個物件的引用。 |
|
返回帶有指定名稱的物件集合。 |
|
返回帶有指定標籤名的物件集合。 |
|
開啟一個流,以收集來自任何 document.write() 或 document.writeln() 方法的輸出。 |
|
向文件寫 HTML 表示式 或 JavaScript 程式碼。 |
|
等同於 write() 方法,不同的是在每個表示式之後寫一個換行符。 |
操作DOM最重要的就是在JS根據document物件去獲得HTML標記節點物件。最為重要的方法: getElementById()、getElementsByName()、getElementsByTagName()
4.8.2.3.1 從根節點逐層獲取標籤
//返回根節點物件(擁有子節點)
var root = document.documentElement;
console.info(root);
console.info(root.nodeName);//返回根節點的名稱
//獲得根節點的第一個子節點
var head = root.firstChild;
console.info(head);
//獲得根節點的最後一個一個子節點
console.info(root.lastChild);
//返回根節點的所有子節點
var nodes = root.childNodes;
console.info(nodes);
var body = document.body;//獲得body節點
console.info(body.childNodes);//返回body節點的所有子節點
4.8.2.3.2 針對性獲得標籤
//根據id獲得頁面中某一個特定的標籤
var center = document.getElementById("center");
console.info(center);
//根據名字將會獲得名字相同的一類標籤
var tagnames = document.getElementsByName("first");
console.info(tagnames);
// document.getElementsByClassName();或者使用這個
//根據標記的名稱獲得同類型的標籤
var tags = document.getElementsByTagName("div");
console.info(tags);
4.8.2.3.3 針對標記新增內容
獲得標記之後,如果需要針對標記進行內容新增,需要使用innerHTML
,innerText兩個屬性。
例如:
var left = document.getElementById("left");
console.info(left.innerText);//只返回文字內容
console.info(left.innerHTML);//返回標記和文字內容
//向left標記中新增子標記a
left.innerHTML =('<a href="http://www.baidu.com">百度一下</a>');
//向left標記中新增文字資訊[包括a標記的內容,也會變成文字]
left.innerText = ('<a href="http://www.baidu.com">百度一下</a>');
4.8.2.3.4 innerText和innerHTML的區別
innerText和innerHTML比較而言, innerHTML主要給標記新增子標記以及內容,而 innerText
只能給標記新增內容。
4.8.3 JS事件
4.8.3.1 事件驅動
JS是一個基於事件驅動架構模式下的面向物件的指令碼語言,基於物件的程式語言一般都採用事件驅動架構,在瀏覽器上面,通常滑鼠或熱鍵的動作稱之為"事件" ,而由事件產生的一系列連鎖反應,我們稱之為"事件驅動"。用通俗易懂的話來說:就是我們採用JS定義的函式,需要由滑鼠、熱鍵的動作來驅動
事件並非只有使用者才能觸發,實際上瀏覽器自己的一些動作也可以產生"事件",比如:在載入頁面的時候,就會觸發load載入事件,而關閉頁面的事件,會觸發unload事件。
歸納一下:必須需要事件驅動的動作,可以分為以下3類
1、用來引起頁面之間跳轉的事件,主要是超連結事件 ,還有按鈕
2、瀏覽器自己引發的事件
3、表單內容驗證,表單與其他介面物件互動所產生的事件
4.8.3.2 Js中的事件
事件控制代碼:
屬性 |
此事件發生在何時... |
影象的載入被中斷。 |
|
元素失去焦點。 |
|
域的內容被改變。 |
|
當用戶點選某個物件時呼叫的事件控制代碼。 |
|
當用戶雙擊某個物件時呼叫的事件控制代碼。 |
|
在載入文件或影象時發生錯誤。 |
|
元素獲得焦點。 |
|
某個鍵盤按鍵被按下。 |
|
某個鍵盤按鍵被按下並鬆開。 |
|
某個鍵盤按鍵被鬆開。 |
|
一張頁面或一幅影象完成載入。 |
|
滑鼠按鈕被按下。 |
|
滑鼠被移動。 |
|
滑鼠從某元素移開。 |
|
滑鼠移到某元素之上。 |
|
滑鼠按鍵被鬆開。 |
|
重置按鈕被點選。 |
|
視窗或框架被重新調整大小。 |
|
文字被選中。 |
|
確認按鈕被點選。 |
|
使用者退出頁面。 |
例如:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
/*針對文件物件,新增鍵盤事件*/
document.onkeypress = function(e){
var keynum
var keychar
var numcheck
if(window.event) // IE
{
keynum = e.keyCode
}
else if(e.which) // Netscape/Firefox/Opera
{
keynum = e.which
}
keychar = String.fromCharCode(keynum)
console.info(keynum+"----------------"+keychar);
}
/*針對某一個標記,新增鍵盤事件*/
function keypress(e)
{
var keynum
var keychar
var numcheck
if(window.event) // IE
{
keynum = e.keyCode
}
else if(e.which) // Netscape/Firefox/Opera
{
keynum = e.which
}
keychar = String.fromCharCode(keynum)
console.info(keynum+"----------------"+keychar);
if(keynum == 101){
closeWindow();
}
}
function closeWindow(){
window.close();
}
/*改變超連結的樣式*/
function removeUnderLine(obj){
console.log(obj);
obj.style.textDecoration="none";
}
/*改變超連結的樣式*/
function addUnderLine(obj){
console.log(obj);
obj.style.textDecoration="underline";
}
/*改變編輯狀態*/
function disable(obj){
console.log(obj);
obj.disabled = true;
}
</script>
<form>
<input type="text" onkeypress="keypress(event)" onmouseup="disable(this)"/>
</form>
<br/>
<a href="#" onmouseover="removeUnderLine(this)" onmouseout="addUnderLine(this)" >百度一下</a>
</body>
<html>
4.8.4 Window物件
window物件可以說是在整個客戶端JS中,扮演著非常重要的角色。它是整個瀏覽器的全域性物件,它就代表著瀏覽器的某一個窗體。它是整個BOM物件中的根,它是JS中最大的一個物件。它的特點是:它提供了一系列針對窗體操作的屬性和行為,但是呼叫的時候,可以省略"window." ,而直接使用"屬性"以及“方法" 。
window物件就代表一個瀏覽器窗體或者一個框架!
4.8.4.1 物件屬性
屬性 |
描述 |
返回視窗是否已被關閉。 |
|
設定或返回視窗狀態列中的預設文字。 |
|
對 Document 物件的只讀引用。請參閱 Document 物件。 |
|
對 History 物件的只讀引用。請引數 History 物件。 |
|
返回視窗的文件顯示區的高度。 |
|
返回視窗的文件顯示區的寬度。 |
|
length |
設定或返回視窗中的框架數量。 |
用於視窗或框架的 Location 物件。請參閱 Location 物件。 |
|
設定或返回視窗的名稱。 |
|
對 Navigator 物件的只讀引用。請引數 Navigator 物件。 |
|
返回對建立此視窗的視窗的引用。 |
|
返回視窗的外部高度。 |
|
返回視窗的外部寬度。 |
|
pageXOffset |
設定或返回當前頁面相對於視窗顯示區左上角的 X 位置。 |
pageYOffset |
設定或返回當前頁面相對於視窗顯示區左上角的 Y 位置。 |
parent |
返回父視窗。 |
對 Screen 物件的只讀引用。請引數 Screen 物件。 |
|
返回對當前視窗的引用。等價於 Window 屬性。 |
|
設定視窗狀態列的文字。 |
|
返回最頂層的先輩視窗。 |
|
window |
window 屬性等價於 self 屬性,它包含了對視窗自身的引用。 |
screenLeft screenTop screenX screenY
|
只讀整數。聲明瞭視窗的左上角在螢幕上的的 x 座標和 y 座標。IE、Safari 和 Opera 支援 screenLeft 和 screenTop,而 Firefox 和 Safari 支援 screenX 和 screenY。 |
4.8.4.2 物件方法
方法 |
描述 |
顯示帶有一段訊息和一個確認按鈕的警告框。 |
|
把鍵盤焦點從頂層視窗移開。 |
|
取消由 setInterval() 設定的 timeout。 |
|
取消由 setTimeout() 方法設定的 timeout。 |
|
關閉瀏覽器視窗。 |
|
顯示帶有一段訊息以及確認按鈕和取消按鈕的對話方塊。 |
|
建立一個 pop-up 視窗。 |
|
把鍵盤焦點給予一個視窗。 |
|
可相對視窗的當前座標把它移動指定的畫素。 |
|
把視窗的左上角移動到一個指定的座標。 |
|
開啟一個新的瀏覽器視窗或查詢一個已命名的視窗。 |
|
列印當前視窗的內容。 |
|
顯示可提示使用者輸入的對話方塊。 |
|
按照指定的畫素調整視窗的大小。 |
|
把視窗的大小調整到指定的寬度和高度。 |
|
按照指定的畫素值來滾動內容。 |
|
把內容滾動到指定的座標。 |
|
按照指定的週期(以毫秒計)來呼叫函式或計算表示式。 |
|
在指定的毫秒數後呼叫函式或計算表示式。 |
4.8.4.2.1 對話方塊
JS中為了和使用者進行資訊交流,也提供了3種不同型別的彈框,分別是最為常見的提示框、確認框、對話方塊。
顯示帶有一段訊息和一個確認按鈕的警告框。 |
|
顯示可提示使用者輸入的對話方塊。返回輸入的內容 |
|
顯示帶有一段訊息以及確認按鈕和取消按鈕的對話方塊。返回的是ture和false,ture是確認按鈕,false是取消按鈕。 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function openAlert() {
alert("我是提示框,或者警告框!");
}
function openConfirm(){
var r = confirm("你確認需要刪除以下內容嗎?");
if(r){
console.log("恭喜你,你依舊刪除成功!");
}else{
console.log("浪子回頭,孺子可教!"<