亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript學習筆記(三)BOM和DOM詳解

2019-11-20 14:04:31
字體:
來源:轉載
供稿:網友

js組成

我們都知道, javascript 有三部分構成,ECMAScript,DOMBOM,根據宿主(瀏覽器)的不同,具體的表現形式也不盡相同,ie和其他的瀏覽器風格迥異。

1. DOM 是 W3C 的標準; [所有瀏覽器公共遵守的標準]
2. BOM 是 各個瀏覽器廠商根據 DOM
在各自瀏覽器上的實現;[表現為不同瀏覽器定義有差別,實現方式不同]
3. window 是 BOM 對象,而非 js 對象;

DOM(文檔對象模型)是 HTMLXML 的應用程序接口(API)。

BOM 主要處理瀏覽器窗口和框架,不過通常瀏覽器特定的 JavaScript 擴展都被看做 BOM 的一部分。這些擴展包括:

彈出新的瀏覽器窗口移動、關閉瀏覽器窗口以及調整窗口大小提供 Web 瀏覽器詳細信息的定位對象提供用戶屏幕分辨率詳細信息的屏幕對象對 cookie 的支持IE 擴展了 BOM,加入了 ActiveXObject 類,可以通過 JavaScript 實例化 ActiveX 對象

javacsript是通過訪問BOM(Browser Object Model)對象來訪問、控制、修改客戶端(瀏覽器),由于BOMwindow包含了document,window對象的屬性和方法是直接可以使用而且被感知的,因此可以直接使用window對象的document屬性,通過document屬性就可以訪問、檢索、修改XHTML文檔內容與結構。因為document對象又是DOM(Document Object Model)模型的根節點??梢哉f,BOM包含了DOM(對象),瀏覽器提供出來給予訪問的是BOM對象,從BOM對象再訪問到DOM對象,從而js可以操作瀏覽器以及瀏覽器讀取到的文檔。其中
DOM包含:window

Window對象包含屬性:document、location、navigator、screen、history、framesDocument根節點包含子節點:forms、location、anchors、images、links

window.document已然可以看出,DOM的最根本的對象是BOM的window對象的子對象。

區別:DOM描述了處理網頁內容的方法和接口,BOM描述了與瀏覽器進行交互的方法和接口。

認識DOM

先來看看下面代碼:

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">  <head>      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />      <title>DOM</title>  </head>  <body>      <h2><a >javascript DOM</a></h2>      <p>對HTML元素進行操作,可添加、改變或移除css樣式等</p>      <ul>          <li>Javascript</li>          <li>DOM</li>          <li>CSS</li>      </ul>  </body>  </html>

將HTML代碼分解為DOM節點層次圖:

 **HTML文檔可以說由節點構成的集合,DOM節點有:**1. 元素節點:上圖中<html>、<body>、<p>等都是元素節點,即標簽。2. 文本節點:向用戶展示的內容,如<li>...</li>中的JavaScript、DOM、CSS等文本。3. 屬性節點:元素屬性,如<a>標簽的鏈接屬性。

節點屬性節點屬性nodeName返回一個字符串,其內容是節點的名字nodeType返回一個整數,這個數值代表給定節點的類型nodeValue返回給定節點的當前值

遍歷節點樹遍歷節點樹childNodes返回一個數組,這個數組由給定元素的子節點構成firstChild返回第一個子節點lastChild返回最后一個子節點parentNode返回一個給定節點的父節點nextSibling返回給定節點的下一個子節點previousSibling返回給定節點的上一個子節點

DOM操作DOM操作creatElement(element)創建一個新的元素節點creatTextNode()創建一個包含給定文本的新文本節點appendChild()指定節點的最后一個節點列表后添加一個新的子節insertBefore()將一個給定節點插入到一個給定元素節點的給定子節點的前面removeChild()從一個給定元素中刪除子節點replaceChild()把一個給定父元素里的一個子節點替換為另外一個節點

DOM通過創建樹來表示文檔,描述了處理網頁內容的方法和接口,從而使開發者對文檔的內容和結構具有空前的控制力,用DOM API可以輕松地刪除、添加和替換節點。

1. 訪問節點

`var oHtml = document.documentElement;` //返回存在于 XML 以及 HTML 文檔中的文檔根節點,oHtml包含了一個表示<html />的HTMLElement對象`document.body` //是對 HTML 頁面的特殊擴展,提供了對 <body> 標簽的直接訪問</span><span></span></span>`document.getElementById("ID")` //通過指定的 ID 來返回元素,getElementById() 無法工作在 XML 中,IE6還會返回name為指定ID的元素`document.getElementByName("name")`//獲取所有name特性等于指定值的元素,不過在IE6和Opera7.5上還會返回id為給定名稱的元素且僅檢查<input/>和<img/>`var x=document.getElementsByTagName("p");` //使用指定的標簽名返回所有的元素列表NodeList,索引號從0開始。當參數是一個星號的時候,IE6并不返回所有的元素,必須用document.all來替代

2. Node節點的特性和方法

firstChild //Node,指向在childNodes列表中的第一個節點 lastChild //Node,指向在childNodes列表中的最后一個節點 parentNode //Node,指向父節ownerDocument //Document,指向這個節點所屬的文檔 firstChild //Node,指向在childNodes列表中的第一個節點  lastChild //Node,指向在childNodes列表中的最后一個節點  parentNode //Node,指向父節點  childNodes //NodeList,所有子節點的列表 previousSibling /Node,/指向前一個兄弟節點:如果這個節點就是第一個節點,那么該值為 null `nextSibling` //Node,指向后一個兄弟節點:如果這個節點就是最后一個節點,那么該值為null `hasChildNodes()` //Boolean,當childNodes包含一個或多個節點時,返回真值 

3.DOM事件

  DOM同時兩種事件模型:冒泡型事件和捕獲型事件   冒泡型事件:事件按照從最特定的事件目標到最不特定的事件目標的順序觸發   <body onclick="handleClick()">     <div onclick="handleClick()">Click Me</div>   </body>   觸發的順序是:div、body、html(IE 6.0和Mozilla 1.0)、document、window(Mozilla 1.0)   捕獲型事件:與冒泡事件相反的過程,事件從最不精確的對象開始觸發,然后到最精確   上面例子觸發的順序是:document、div   DOM事件模型最獨特的性質是,文本節點也觸發事件(在IE中不會)。 

4.事件處理函數/監聽函數

 **事件處理函數/監聽函數** 在JavaScript中: var oDiv = document.getElementById("div1"); oDiv.onclick = function(){ //onclick只能用小寫,默認為冒泡型事件   alert("Clicked!"); } 在HTML中: <div onclick="javascript: alert("Clicked!")"></div> //onclick大小寫任意 

IE事件處理程序attachEvent()和detachEvent()

在IE中,每個元素和window對象都有兩個方法:attachEvent()和detachEvent(),這兩個方法接受兩個相同的參數,事件處理程序名稱和事件處理程序函數,如:

[object].attachEvent("name_of_event_handler","function_to_attach") [object].detachEvent("name_of_event_handler","function_to_remove") var fnClick = function(){   alert("Clicked!"); } oDiv.attachEvent("onclick", fnClick); //添加事件處理函數 oDiv.attachEvent("onclick", fnClickAnother); // 可以添加多個事件處理函數 oDiv.detachEvent("onclick", fnClick); //移除事件處理函數 

在使用attachEvent()方法的情況下,事件處理程序會在全局作用域中運行,因此this等于window。

跨瀏覽器的事件處理程序

addHandler()和removeHandler()

addHandler()方法屬于一個叫EventUntil()的對象,這兩個方法均接受三個相同的參數,要操作的元素,事件名稱和事件處理程序函數。

事件類型

**事件類型**  鼠標事件:click、dbclick、mousedown、mouseup、mouseover、mouseout、mousemove  鍵盤事件:keydown、keypress、keyup  HTML事件:load、unload、abort、error、select、change、submit、reset、resize、scroll、focus、blur

事件處理器

執行JavaScript 代碼的程序在事件發生時會對事件做出響應。為了響應一個特定事件
而被執行的代碼稱為事件處理器。

在HTML標簽中使用事件處理器的語法是:

<HTML標簽 事件處理器="JavaScript代碼''> 

事件處理程序

事件就是用戶或瀏覽器自身執行的某種動作。比如click,mouseup,keydown,mouseover等都是事件的名字。而響應某個事件的函數就叫事件處理程序(事件監聽器),事件處理程序以on開頭,因此click的事件處理程序就是onclick

DOM 0級事件處理程序

DOM 0級事件處理程序:把一個函數賦值給一個事件的處理程序屬性

<input type="button" value="按鈕2" id="ben2"/>     var btn2=document.getElementById('btn2');獲得btn2按鈕對象     btn2.onclick      //給btn2添加onclick屬性,屬性又觸發了一個事件處理程序btn2.onclick=function(){}                    //添加匿名函數btn2.onclick=null      //刪除onclick屬性

如何阻止冒泡?

阻止冒泡有以下方法:

e.cancelBubble=true;e.stopPropagation();return false;

innerText、innerHTML、outerHTML、outerText

  innerText、innerHTML、outerHTML、outerText  innerText: 表示起始標簽和結束標簽之間的文本   innerHTML: 表示元素的所有元素和文本的HTML代碼   如:<div><b>Hello</b> world</div>的innerText為Hello world,innerHTML為Hello world   outerText: 與前者的區別是替換的是整個目標節點,問題返回和innerText一樣的內容   outerHTML: 與前者的區別是替換的是整個目標節點,返回元素完整的HTML代碼,包括元素本身 

DOM 2級事件處理程序

DOM 2級事件定義了兩個方法,用于指定和刪除事件處理程序的操作。addEventListener()removeEventListener()

addEventListener()和removeEventListener()

在DOM中,addEventListener()和removeEventListener()用來分配和移除事件處理函數,與IE不同的是,這些方法需要三個參數:事件名稱,要分配的函數和處理函數是用于冒泡階段(false)還是捕獲階段(true),默認為冒泡階段false [object].addEventListener("name_of_event",fnhander,bcapture) [object].removeEventListener("name_of_event",fnhander,bcapture) var fnClick = function(){   alert("Clicked!"); } oDiv.addEventListener("onclick", fnClick, false); //添加事件處理函數 oDiv.addEventListener("onclick", fnClickAnother, false); // 與IE一樣,可以添加多個事件處理函數 oDiv.removeEventListener("onclick", fnClick, false); //移除事件處理函數 如果使用addEventListener()將事件處理函數加入到捕獲階段,則必須在removeEventListener()中指明是捕獲階段,才能正確地將這個事件處理函數刪除 oDiv.onclick = fnClick; oDiv.onclick = fnClickAnother; //使用直接賦值,后續的事件處理函數會覆蓋前面的處理函數 oDiv.onclick = fnClick; oDiv.addEventListener("onclick", fnClickAnother, false); //會按順序進行調用,不會覆蓋 

一張圖了解OUTHTML和innerText、innerHTML:

DOM基本操作思維導圖

更詳細的XML DOM - Element 對象的屬性和方法請訪問w3cshool

BOM 部分

BOM的核心是window,而window對象又具有雙重角色,它既是通過js訪問瀏覽器窗口的一個接口,又是一個Global(全局)對象。這意味著在網頁中定義的任何對象,變量和函數,都以window作為其global對象。

window.close(); //關閉窗口 window.alert("message"); //彈出一個具有OK按鈕的系統消息框,顯示指定的文本 window.confirm("Are you sure?"); //彈出一個具有OK和Cancel按鈕的詢問對話框,返回一個布爾值 window.prompt("What's your name?", "Default"); //提示用戶輸入信息,接受兩個參數,即要顯示給用戶的文本和文本框中的默認值,將文本框中的值作為函數值返回 window.status //可以使狀態欄的文本暫時改變 window.defaultStatus //默認的狀態欄信息,可在用戶離開當前頁面前一直改變文本 window.setTimeout("alert('xxx')", 1000); //設置在指定的毫秒數后執行指定的代碼,接受2個參數,要執行的代碼和等待的毫秒數 window.clearTimeout("ID"); //取消還未執行的暫停,將暫停ID傳遞給它 window.setInterval(function, 1000); //無限次地每隔指定的時間段重復一次指定的代碼,參數同setTimeout()一樣 window.clearInterval("ID"); //取消時間間隔,將間隔ID傳遞給它 window.history.go(-1); //訪問瀏覽器窗口的歷史,負數為后退,正數為前進 window.history.back(); //同上 window.history.forward(); //同上 window.history.length //可以查看歷史中的頁面數  

document對象

document對象:實際上是window對象的屬性,document == window.document為true,是唯一一個既屬于BOM又屬于DOM的對象 document.lastModified //獲取最后一次修改頁面的日期的字符串表示 document.referrer //用于跟蹤用戶從哪里鏈接過來的 document.title //獲取當前頁面的標題,可讀寫 document.URL //獲取當前頁面的URL,可讀寫 document.anchors[0]或document.anchors["anchName"] //訪問頁面中所有的錨 document.forms[0]或document.forms["formName"] //訪問頁面中所有的表單 document.images[0]或document.images["imgName"] // 訪問頁面中所有的圖像 document.links [0]或document.links["linkName"] //訪問頁面中所有的鏈接 document.applets [0]或document.applets["appletName"] //訪問頁面中所有的Applet document.embeds [0]或document.embeds["embedName"] //訪問頁面中所有的嵌入式對象 document.write(); 或document.writeln(); //將字符串插入到調用它們的位置 

location對象

location對象:表示載入窗口的URL,也可用window.location引用它 location.href //當前載入頁面的完整URL,如http://www.somewhere.com/pictures/index.htm location.portocol //URL中使用的協議,即雙斜杠之前的部分,如http location.host //服務器的名字,如www.wrox.com location.hostname //通常等于host,有時會省略前面的www location.port //URL聲明的請求的端口,默認情況下,大多數URL沒有端口信息,如8080 location.pathname //URL中主機名后的部分,如/pictures/index.htm location.search //執行GET請求的URL中的問號后的部分,又稱查詢字符串,如?param=xxxx location.hash //如果URL包含#,返回該符號之后的內容,如#anchor1 location.assign("http:www.baidu.com"); //同location.href,新地址都會被加到瀏覽器的歷史棧中 location.replace("http:www.baidu.com"); //同assign(),但新地址不會被加到瀏覽器的歷史棧中,不能通過back和forward訪問 location.reload(true | false); //重新載入當前頁面,為false時從瀏覽器緩存中重載,為true時從服務器端重載,默認為false 

navigator對象

 `navigator`對象:包含大量有關Web瀏覽器的信息,在檢測瀏覽器及操作系統上非常有用,也可用window.navigator引用它 `navigator.appCodeName` //瀏覽器代碼名的字符串表示 navigator.appName //官方瀏覽器名的字符串表示 navigator.appVersion //瀏覽器版本信息的字符串表示 navigator.cookieEnabled //如果啟用cookie返回true,否則返回false navigator.javaEnabled //如果啟用java返回true,否則返回false navigator.platform //瀏覽器所在計算機平臺的字符串表示 navigator.plugins //安裝在瀏覽器中的插件數組 navigator.taintEnabled //如果啟用了數據污點返回true,否則返回false navigator.userAgent //用戶代理頭的字符串表示  

screen對象

 screen對象:用于獲取某些關于用戶屏幕的信息,也可用window.screen引用它  screen.width/height //屏幕的寬度與高度,以像素計  screen.availWidth/availHeight //窗口可以使用的屏幕的寬度和高度,以像素計  screen.colorDepth //用戶表示顏色的位數,大多數系統采用32位  window.moveTo(0, 0);  window.resizeTo(screen.availWidth, screen.availHeight); //填充用戶的屏幕  

window對象方法

BOM和DOM的結構關系示意圖


window對象思維導圖

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产性色av一区二区| 97香蕉超级碰碰久久免费的优势| 国产欧美日韩精品专区| 久久大大胆人体| 色噜噜狠狠色综合网图区| 久久中文字幕在线| 亚洲国产福利在线| 久久久99久久精品女同性| 亚洲国产成人一区| 永久555www成人免费| 国产精品午夜国产小视频| 北条麻妃久久精品| 91免费国产视频| 国产精品久久久久久久一区探花| 精品久久久一区| 亚洲精品一区二区网址| 亚洲国产精品成人一区二区| 伊人久久五月天| 亚洲精品久久久久中文字幕二区| 欧美电影免费在线观看| 97超级碰碰人国产在线观看| 另类美女黄大片| 国产欧美婷婷中文| 欧美中文字幕在线| 欧美贵妇videos办公室| 中文字幕久久亚洲| 国产精品69久久| 2018日韩中文字幕| 亚洲精品国产美女| 欧美激情免费观看| 久久精品国产v日韩v亚洲| 欧美日韩一区二区免费在线观看| 国产69精品久久久| 欧美壮男野外gaytube| 欧美日韩精品中文字幕| 亚洲精品99久久久久| 亚洲福利在线看| 日韩精品视频在线免费观看| 国产精品视频一区国模私拍| 亚洲欧美日韩高清| 2020国产精品视频| 欧美激情在线视频二区| 欧美激情乱人伦一区| 亚洲大胆人体在线| 久久久www成人免费精品张筱雨| 97在线观看视频| 尤物精品国产第一福利三区| 亚洲精品久久久久久下一站| 精品magnet| 国产日产欧美精品| 久久国产精品电影| 久久精品中文字幕电影| 91香蕉亚洲精品| 国产z一区二区三区| 91情侣偷在线精品国产| 青青草99啪国产免费| 91在线观看免费高清| 亚洲男女自偷自拍图片另类| 日韩精品有码在线观看| 久久久亚洲网站| 高清亚洲成在人网站天堂| 精品久久久久久久久久久久| 国产一区二区三区久久精品| 日韩欧美国产视频| 久久99精品国产99久久6尤物| 亚洲精品日韩丝袜精品| 成人精品一区二区三区电影黑人| 国产欧美一区二区三区视频| 欧美老少做受xxxx高潮| 欧美大全免费观看电视剧大泉洋| 日韩在线精品视频| 91中文字幕在线观看| 精品呦交小u女在线| 日韩精品免费在线视频观看| 欧美激情国产日韩精品一区18| 色系列之999| 国产91露脸中文字幕在线| 久久男人的天堂| 欧美激情精品久久久久久变态| 精品国产91乱高清在线观看| 亚洲欧美激情四射在线日| 久久精品国产99国产精品澳门| 亚洲人成电影网站色…| 国产精品欧美久久久| 欧洲成人性视频| 2019亚洲日韩新视频| 亚洲国产精品网站| 81精品国产乱码久久久久久| 国产v综合v亚洲欧美久久| 国产91精品久久久久久久| 精品国产91久久久久久老师| 国产精品普通话| 国产精品久久久久久久久久| 8090理伦午夜在线电影| 欧美成人黄色小视频| 国产亚洲aⅴaaaaaa毛片| 国产精品h在线观看| 九九热这里只有在线精品视| 亚洲乱码一区二区| 亚洲一级片在线看| 国产91精品黑色丝袜高跟鞋| 88国产精品欧美一区二区三区| 欧日韩在线观看| 国产精品高潮呻吟久久av野狼| 亚洲视频第一页| 亚洲aⅴ男人的天堂在线观看| 中文字幕日韩精品在线观看| 色综合天天综合网国产成人网| 日韩av成人在线观看| 影音先锋欧美在线资源| 亚洲嫩模很污视频| 欧美视频免费在线| 欧洲亚洲免费在线| 韩剧1988免费观看全集| 97在线免费观看| 亚洲精品日韩欧美| 国产女同一区二区| 日韩欧美国产黄色| 国产成人久久精品| 精品久久久在线观看| 91欧美视频网站| 国产一区二区黄| 国产一区二区精品丝袜| 成人国产亚洲精品a区天堂华泰| 国产精品视频久久| 日本精品视频在线观看| 亚洲石原莉奈一区二区在线观看| 亚洲激情第一页| 一区二区三区在线播放欧美| 欧美电影院免费观看| 亚洲丁香婷深爱综合| 久久成人国产精品| 国内伊人久久久久久网站视频| 久久99精品久久久久久琪琪| 亚洲成人av资源网| 久久69精品久久久久久国产越南| 精品视频www| 国产免费一区二区三区在线能观看| 成人免费自拍视频| 色午夜这里只有精品| 国产精品美女久久久久av超清| 97超级碰碰人国产在线观看| 亚洲成成品网站| 成人国产精品久久久| 91精品久久久久久久久中文字幕| 国产成人极品视频| 精品国内自产拍在线观看| 亚洲欧美日韩中文在线制服| 亚洲欧美成人一区二区在线电影| 国产成人啪精品视频免费网| 91在线观看免费网站| 91九色蝌蚪国产| 久久精品国产免费观看| 综合网日日天干夜夜久久| 欧美成人免费网| 欧美国产日产韩国视频| 欧美另类老肥妇| 国产日韩欧美91| 国产精品美乳一区二区免费| 精品日韩视频在线观看| 国产v综合ⅴ日韩v欧美大片| 日韩av免费在线观看| 日韩大片免费观看视频播放| 国产亚洲精品久久久久久777|