摘要:有級級級共個級別。事件類型事件類型鼠標事件鍵盤事件事件事件處理器執行代碼的程序在事件發生時會對事件做出響應。在標簽中使用事件處理器的語法是標簽事件處理器代碼事件處理程序事件就是用戶或瀏覽器自身執行的某種動作。
DOM介紹
D(文檔)可以理解為整個Web加載的網頁文檔,O(對象)可以理解為類似window對象只來的東西,可以調用屬性和方法,這里我們說的是document對象,M(模型)可以理解為網頁文檔的樹形結構,DOM樹由節點構成
節點種類:元素節點、文本節點和屬性節點
DOM(文檔對象模型)是 HTML 和 XML 的應用程序接口(API)。DOM代表著被加載到瀏覽器窗口里的當前網頁:瀏覽器向我們提供了當前網頁的地圖(或者說模型),而我們可以通過js去讀取這張地圖。
BOM 主要處理瀏覽器窗口和框架,不過通常瀏覽器特定的 JavaScript 擴展都被看做 BOM 的一部分。這些擴展包括:
彈出新的瀏覽器窗口 移動、關閉瀏覽器窗口以及調整窗口大小 提供 Web 瀏覽器詳細信息的定位對象 提供用戶屏幕分辨率詳細信息的屏幕對象 對 cookie 的支持 IE 擴展了 BOM,加入了 ActiveXObject 類,可以通過 JavaScript 實例化 ActiveX 對象
window對象對應著瀏覽器窗口本身,這個對象的屬性和方法通常被稱為BOM
DOM包含:window
Window對象包含屬性:document、location、navigator、screen、history、frames Document根節點包含子節點:forms、location、anchors、images、links
從window.document已然可以看出,DOM的最根本的對象是BOM的window對象的子對象。
區別:DOM描述了處理網頁內容的方法和接口,BOM描述了與瀏覽器進行交互的方法和接口。
根據W3C DOM規范,DOM是HTML與XML的應用編程接口(API),DOM將整個頁面映射為一個由層次節點組成的文件。有1級、2級、3級共3個級別。
先來看看下面代碼:
DOM javascript DOM
對HTML元素進行操作,可添加、改變或移除css樣式等
將HTML代碼分解為DOM節點層次圖:
**HTML文檔可以說由節點構成的集合,DOM節點有:** 1. 元素節點:上圖中、、等都是元素節點,即標簽。 2. 文本節點:向用戶展示的內容,如
W3C提供了比較方便的定位節點的方法和屬性,如下所示:
| 方法 | 說明 |
| ------------- |:-------------:|
| getElementById() | 獲取特定ID元素的節點 |
| getElementsByTagName() | 獲取相同元素的節點列表 |
| getElementsByName | 獲取相同名稱的節點列表 |
| getAttribute() | 獲取特定元素節點屬性的值 |
| setAttribute() | 設置特定元素節點屬性的值 |
| removeAttribute() | 移除特定元素節點屬性 |
節點屬性 | |
nodeName | 返回一個字符串,其內容是節點的名字 |
nodeType | 返回一個整數,這個數值代表給定節點的類型 |
nodeValue | 返回給定節點的當前值 |
| 屬性 |說明 |
| ------------- |:-------------:|
| tagName | 獲取原酸節點的標簽名 |
| innerHTML | 獲取元素節點的內容 |
遍歷節點樹 | |
childNodes | 返回一個數組,這個數組由給定元素的子節點構成 |
firstChild | 返回第一個子節點 |
lastChild | 返回最后一個子節點 |
parentNode | 返回一個給定節點的父節點 |
nextSibling | 返回給定節點的下一個子節點 |
previousSibling | 返回給定節點的上一個子節點 |
DOM操作 | |
creatElement(element) | 創建一個新的元素節點 |
creatTextNode() | 創建一個包含給定文本的新文本節點 |
appendChild() | 指定節點的最后一個節點列表后添加一個新的子節 |
insertBefore() | 將一個給定節點插入到一個給定元素節點的給定子節點的前面 |
removeChild() | 從一個給定元素中刪除子節點 |
replaceChild() | 把一個給定父元素里的一個子節點替換為另外一個節點 |
DOM通過創建樹來表示文檔,描述了處理網頁內容的方法和接口,從而使開發者對文檔的內容和結構具有空前的控制力,用DOM API可以輕松地刪除、添加和替換節點。
1. 訪問節點`var oHtml = document.documentElement;` //返回存在于 XML 以及 HTML 文檔中的文檔根節點,oHtml包含了一個表示的HTMLElement對象 `document.body` //是對 HTML 頁面的特殊擴展,提供了對 標簽的直接訪問 `document.getElementById("ID")` //通過指定的 ID 來返回元素,getElementById() 無法工作在 XML 中,IE6還會返回name為指定ID的元素 `document.getElementByName("name")`//獲取所有name特性等于指定值的元素,不過在IE6和Opera7.5上還會返回id為給定名稱的元素且僅檢查和 `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同時兩種事件模型:冒泡型事件和捕獲型事件 冒泡型事件:事件按照從最特定的事件目標到最不特定的事件目標的順序觸發4.事件處理函數/監聽函數Click Me觸發的順序是:div、body、html(IE 6.0和Mozilla 1.0)、document、window(Mozilla 1.0) 捕獲型事件:與冒泡事件相反的過程,事件從最不精確的對象開始觸發,然后到最精確 上面例子觸發的順序是:document、div DOM事件模型最獨特的性質是,文本節點也觸發事件(在IE中不會)。
**事件處理函數/監聽函數** 在JavaScript中: var oDiv = document.getElementById("div1"); oDiv.onclick = function(){ //onclick只能用小寫,默認為冒泡型事件 alert("Clicked!"); } 在HTML中: //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標簽中使用事件處理器的語法是:
事件處理程序
事件就是用戶或瀏覽器自身執行的某種動作。比如click,mouseup,keydown,mouseover等都是事件的名字。而響應某個事件的函數就叫事件處理程序(事件監聽器),事件處理程序以on開頭,因此click的事件處理程序就是onclick
DOM 0級事件處理程序DOM 0級事件處理程序:把一個函數賦值給一個事件的處理程序屬性
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代碼 如:DOM 2級事件處理程序Hello world的innerText為Hello world,innerHTML為Hello world outerText: 與前者的區別是替換的是整個目標節點,問題返回和innerText一樣的內容 outerHTML: 與前者的區別是替換的是整個目標節點,返回元素完整的HTML代碼,包括元素本身
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時從服務器端重載,默認為falsenavigator對象
`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的結構關系示意圖
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87606.html
摘要:看下面一個例子優點使用構造器函數的好處在于,它可以在創建對象時接收一些參數。按照慣例,構造函數的函數名應始終以一個大寫字母開頭,以區分普通函數。返回該對象的源代碼。使您有能力向對象添加屬性和方法。 基本概念 ECMA關于對象的定義是:無序屬性的集合,其屬性可以包含基本值、對象或者函數。對象的每個屬性或方法都有一個名字,而每個名字都映射到一個值。 類 在現實生活中,相似的對象之間往往都有...
摘要:布爾值表示捕獲階段調用事件處理程序,表示冒泡階段通過對象的方法,也可以定義事件的回調函數。對象會被作為第一個參數傳遞給事件監聽的回調函數。布爾默認值是,當設置成時用以取消事件的默認行為與中的相同。 其實這篇文章挺早之前就寫了,但是由于sf保存方面的bug,所以當時寫了一大堆,結果沒保存,覺得這個沒寫完是個不小的遺憾,今天正好有空,就給補充下了,也正好給我的javascript學習總結做...
摘要:今天同學去面試,做了兩道面試題全部做錯了,發過來給道典型的面試題前端掘金在界中,開發人員的需求量一直居高不下。 排序算法 -- JavaScript 標準參考教程(alpha) - 前端 - 掘金來自《JavaScript 標準參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡介 算法實現 選擇排序 簡介 算法實現 ... 圖例詳解那道 setTimeout 與循環閉包的經典面...
摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現在已經一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現將已經寫好的文章整理一個目錄,方便更多的小伙伴去學習。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...
閱讀 1216·2023-04-25 20:56
閱讀 2255·2023-04-25 14:42
閱讀 1020·2023-04-25 14:06
閱讀 2859·2021-10-14 09:42
閱讀 2135·2021-09-22 16:03
閱讀 978·2021-09-13 10:30
閱讀 1342·2019-08-29 15:41
閱讀 1789·2019-08-29 12:55