比較Javascript中BOM與DOM區別與聯繫
1.Javascript組成
JavaScript的實作包括以下3個部分:
的 語法和基本物件。 2)文件物件模型(DOM2)文件物件模型(
DOM):處理網頁內容的方法與介面3)瀏覽器物件模型(
的方法與介面 ECMAScript擴充知識:
① ECMAScript是一個標準,① ECMAScript是一個標準,只是實作一個標準
。 ② “ECMAScript可以為不同種類的宿主環境提供核心的腳本編程能力…”,即ECMAScript不與具體的宿主環境相綁定,如宿主環境是瀏覽器,
AS的宿主環境是Flash。 ③ECMAScript描述了以下內容:語法、類型、語句、關鍵字、保留字、運算子、物件。 我們都知道, javascript
有三部分構成,ECMAScript,DOM和BOM,根據宿主(瀏覽器)的不同,具體的表現形式也不盡其他的瀏覽器風格迥異。 1. DOM
是W3C
的標準;
[所有瀏覽器公共遵守的標準]所有瀏覽器公共遵守的標準
]瀏覽器上的實作;[表現為不同瀏覽器定義有差異,實作方式不同]3. window 是物件;
DOM(文件物件模型)是HTML 和XML 的應用程式介面(API)。 BOM 主要處理瀏覽器視窗和框架,不過通常瀏覽器特定的 JavaScript 擴充功能都被看做 BOM
的一部分。這些擴充功能包括:彈出新的瀏覽器視窗移動、關閉瀏覽器視窗以及調整視窗大小提供Web 屏幕
瀏覽器詳細資料的定位物件提供使用者螢幕解析度詳細資料的使用者螢幕螢幕物件對cookie 的支援
IE 扩展了 BOM,加入了ActiveXObject类,可以通过JavaScript实例化ActiveX对象
javacsript是通过访问BOM(Browser Object Model)对象来访问、控制、修改客户端(浏览器),由于BOM的window包含了document,window对象的属性和方法是直接可以使用而且被感知的,因此可以直接使用window对象的document属性,通过document属性就可以访问、检索、修改XHTML文档内容与结构。因为document对象又是DOM(Document
Object Model)模型的根节点。可以说,BOM包含了DOM(对象),浏览器提供出来给予访问的是BOM对象,从BOM对象再访问到DOM对象,从而js可以操作浏览器以及浏览器读取到的文档。其中
DOM包含:window
Window对象包含属性:document、location、navigator、screen、history、frames
Document根节点包含子节点:forms、location、anchors、images、links
从window.document已然可以看出,DOM的最根本的对象是BOM的window对象的子对象。
区别:DOM描述了处理网页内容的方法和接口,BOM描述了与浏览器进行交互的方法和接口
1.1 DOM, DOCUMENT, BOM, WINDOW 区别
DOM 全称是 Document Object Model,也就是文档对象模型。是针对XML的基于树的API。描述了处理网页内容的方法和接口,是HTML和XML的API,DOM把整个页面规划成由节点层级构成的文档。针对XHTML和HTML的DOM。这个DOM定义了一个HTMLDocument和HTMLElement做为这种实现的基础,就是说为了能以编程的方法操作这个 HTML 的内容(比如添加某些元素、修改元素的内容、删除某些元素),我们把这个 HTML 看做一个对象树(DOM树),它本身和里面的所有东西比如
這些標籤都看做一個對象,每個對像都叫做一個節點(node),節點可以理解為 DOM 中所有 Object 的父類。
DOM 有什麼用?就是為了操作HTML 中的元素,比如說我們要透過JS 把這個網頁的標題改了,直接這樣就可以了:
document.title = 'how to make love';
這個API 使得在網頁上被下載到瀏覽器之後改變網頁的內容成為可能。
document
當瀏覽器下載到一個網頁,通常是HTML,這個HTML 就叫document(當然,這也是DOM 樹中的一個node),從上圖可以看到,document 通常是整個DOM 樹的根節點。這個 document 包含了標題(document.title)、URL(document.URL)等屬性,可以直接在 JS 中存取。
在一個瀏覽器視窗中可能有多個 document,例如,透過 iframe 載入的頁面,每一個都是一個 document。
在JS 中,可以透過document 存取其子節點(其實任何節點都可以),如
document.body;document.getElementById('xxx');
BOMBOM
,瀏覽器物件模型。
剛才說過 DOM 是為了操作文檔出現的接口,那 BOM 顧名思義其實就是為了控制瀏覽器的行為而出現的接口。
瀏覽器可以做什麼呢?例如跳到另一個頁面、前進、後退等等,程式還可能需要取得螢幕的大小之類的參數。
所以 BOM 就是為了解決這些事情出現的介面。例如我們要讓瀏覽器跳到另一個頁面,只要
location.href = "http://www.xxxx.com";
這個 location 就是 BOM 裡的一個物件。
window
window 也是 BOM 的一個對象,除去程式設計意義上的「兜底對象」之外,透過這個對象可以取得視窗位置、決定視窗大小、彈出對話框等等。例如我要關閉目前視窗:
window.close();
總結題主的問題:
DOM 是為了操作文檔出現的API,document 是其的一個物件;
DOM 是為了操作文件出現的API,document 是其的一個物件;
歸DOM管的:
web開發人員嘔心瀝血寫出來的一個資料夾,裡面有index.html,CSS和JS什麼鬼的,部署在伺服器上,我們可以透過瀏覽器的地址欄輸入車將這個document加載到本地,瀏覽,右鍵查看原始碼等。 。狀態列,顯示http狀態碼等) D
區(捲軸scroll bar) ,前者是對瀏覽器本身進行操作,而後者是對瀏覽器(可看成容器)內的內容進行操作BOM
和DOM的結構關係示意圖
2.文件物件模型(DOM)
DOM節點樹模型(以HTML DOM樹為例)
文檔)看成一個樹狀結構,在DOM中,HTML
文檔的樹狀結構被表示為一個體形結構。並以document物件表示該文件,樹的每個子節點表示HTML文件中的不同內容。 每個載入瀏覽器的HTML 文件都會成為Document
物件,Documentt物件,Document是探索的全域變數 document 可以存取Document物件 2.1認識DOM為DOM節點層級圖:
DOM透過創建樹來表示文檔,描述了處理網頁內容的方法和接口,從而使開發者對文檔的內容和結構具有空前的控制力,用DOM API可以輕鬆地刪除、添加和替換節點。
1)節點類型DOM
規定文件中的每個成分都是一個節點(Node
),HTML
:
1.
、
>等。 ,即標籤。 2. 文字節點(Text):向使用者展示的內容,如
元素屬性,元素才有屬性,如元素屬性,元素才有屬性,如< .baidu.com"。
1) DOM節點三大屬性(XML DOM)
1))1))
1)和#text的字串。 2)nodeType:元素節點、屬性節點、文字節點的nodeType值分別為1nodeType
、3)nodeValue:元素節點、屬性節點、文字節點的回傳值分別為null
、屬性值、文字節點內容。2.2 DOM常見操作
Node
為所有節點的父接口,其定義了一組公共的屬性和方法,如下:節點
) ① 取得元素節點:透過
document物件的三個方法取得
document.getElementById("ID")document.getElementByName("name")
document.getElementByName("name")
document.getElementByName("name").A. ② 取得屬性節點:屬性節點附屬於元素節點,可透過元素節點的getAttributeNode(attrName)方法取得屬性節點,也可透過getAttribute(attrName)直接取得屬性值。 (與之相對的是Element介面的setAttribute(attrName , attrValue)方法,如果屬性不存在,則直接添加到元素節點上)
③ 取得文字節點:文字節點為元素節點的子節點,可透過元素節點(Element介面)提供的childnodes()[index] 方法取得。
childNodes //NodeList,所有子節點的列表firstChild //Node,指向在childNodes列表中的第一個節點 lastChild //Node,指向在childNodes列表中的最後一個節點 lastChild //Node,指向在childNodes? /Node,指向父節點 previousSibling /Node,/指向前一個兄弟節點:如果這個節點是第一個節點,那麼該值為nullnextSibling //Node,指向後一個兄弟節點:如果這個節點就是最後一個節點,那麼值為nullhasChildNodes()` //Boolean,當childNodes包含一個或多個節點時,傳回真值
① 改變屬性節點的值:可以透過屬性節點的
nodeValue直接修改屬性值,也可透過元素節點的setAttribute()
方法改變。 ② 改變文字節點的值:透過文字節點的nodeValue直接修改。
在HTML DOM中,取得並改變元素內容最簡單方法是使用元素的innerHTML
屬性(innerText 拓展:innerText、innerHTML、outerHTML、outerText innerText: 表示起始标签和结束标签之间的文本 innerHTML: 表示元素的所有元素和文本的HTML代码 如:
outerText: 與前者的區別是替換的是整個目標節點,問題返回和innerText一樣的內容
outerHTML: 與前者的區別是替換的是整個目標節點,回傳元素完整的HTML程式碼,包含元素本身
一張圖片了解OUTHTML和innerText、innerHTML:
改變HTML 改變 color =「red」;
3
)刪除節點3 ,需取得
A的父節點B,父節點可透過17.1.1中的方法取得,也可以直接透過A中的方法取得,也可以直接透過A中的方法取得的屬性。呼叫B的removeChild(A)即可刪除A節點。 ② 刪除屬性節點:可透過屬性節點所屬的元素節點的removeAttribute(attrName)或
removeAttributeNode(node)或removeAttributeNode(node)。
③ 清空文字節點:最簡單也是最常用的方法就是直接設定文字節點的nameNode屬性為空白字串:textNode.nodeValue =」」。
混淆點:
🜎🜎
var p = document.getElementById('example');
p.nodeValue //null,p是元素節點,所以
nodeop.getAttributeNode('id').nodeValue //example
,這裡取得p的id屬性
的no
id屬性 .childNodes[0].nodeValue //這是一段文字,p是含有兩個子節點的,插入的文字雖然沒有標籤,但它依然是一個節點。 其型別是文字節點,其nodeValue是就是寫入在其中的字串,包含換行和縮排
p.innerHTML//這是一段文字>"這裡innerHTML返回了
p所包含的全部的節點的所包含的各種值了,以字符串的形式。
4)创建和添加节点
① 创建节点:通过document对象的createElement(eleName)、createTextNode(nodeValue)方法可分别创建元素节点和文本节点。属性节点也有自己的create方法,但是用的少,直接用元素节点的setAttribute()方法即可添加属性。
② 添加节点:两个重要的方法:appendChild()和insertBefore(),具体见Node接口中的方法。
扩展:上面的两个方法都是在已知父节点时用到的,也可以直接在兄弟节点后添加新节点:x.insertBefore(newNode)和x.appendChild(newNode)都可以向x后追加一个新的子节点。
5)替换节点
主要掌握replaceChild(newNode , oldNode) 替换元素节点。(属性节点和文本节点有更简单的方法)
2.3 DOM事件
DOM同时两种事件模型:冒泡型事件和捕获型事件
冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标的顺序触发
触发的顺序是:div、body、html(IE 6.0和Mozilla 1.0)、document、window(Mozilla 1.0)
捕获型事件:与冒泡事件相反的过程,事件从最不精确的对象开始触发,然后到最精确
上面例子触发的顺序是:document、div
DOM事件模型最独特的性质是,文本节点也触发事件(在IE中不会)。
1)事件处理函数/监听函数
在JavaScript中:
var oDiv = document.getElementById("div1");
oDiv.onclick = function(){ //onclick只能用小写
alert("Clicked!");
}
或者
var elem =document.getElementById(“id”)
elem.onmouseover=handleMouseOver //handleMouseOver 是函数名
Function handleMouseOve(e){...}
在HTML中:
//onclick大小寫任意擴展:
IE事件處理程序attachEvent()和detachEvent()
在IE中,每個元素和window )和detachEvent(),這兩個方法接受兩個相同的參數,事件處理程序名稱和事件處理程序函數,如:
[object].attachEvent("name_of_event_handler","function_to_attach")
[object] .detachEvent("name_of_event_handler","function_to_remove")
var fnClick = function(){
alert("Clicked!");
}eg;處理函數
oDiv.attachEvent("onclick", fnClickAnother); // 可以加入多個事件處理函數
oDiv.detachEvent("onclick", fnClick); //移除事件處理函數
在使用)方法的情況下,事件處理程序會在全域作用域中運行,因此this等於window。
2)跨瀏覽器的事件處理程序addHandler()和removeHandler()
addHandler()方法屬於一個叫EventUntil()的對象,這兩種方法均接受三個相同的參數,要操作的元素,事件名稱和事件處理程序函數。
3)事件類型滑鼠事件:click、dbclick、mousedown、mouseup、mouseover、mouseout、mousemove
鍵盤事件:keydown、keypress、keyseup🜵
、change、submit、reset、resize、scroll、focus、blur4)事件處理器
執行JavaScript 程式碼的程式在事件發生時會對事件做出回應。為了回應一個特定事件
而被執行的程式碼稱為事件處理器。 在HTML標籤中使用事件處理器的語法是:5)事件處理程序
事件就是使用者或瀏覽器本身所執行的某種動作。 例如click,mouseup,keydown,mouseover等都是事件的名字。就是onclick
6)
DOM 0級事件處理程序DOM 0級事件處理程序:分配一個函數給一個事件的處理程序屬性
"tn2" id="ben2"/> var btn2=document.getElementById('btn2');取得btn2按鈕物件 btn2.onclick 物件 btn2.onclick 物件 btn2。 btn2.onclick=function(){} //刪除onclick屬性7)
DOM 2級事件處理程序 DOM 2級事件定義了兩個方法,用於指定和刪除事件處理程序的操作。 ()和removeEventListener()用來指派和移除事件處理函數,與IE不同的是,這些方法需要三個參數:事件名稱,要指派的函數和處理函數是用於冒泡階段(false)還是捕獲階段(true),預設為冒泡階段false
[object].addEventListener("name_of_event",fnhander,bcapture)[object].removeEventListener("name_of_event",fnlick,bcapture); ){ alert("Clicked!");}
oDiv.addEventListener("onclick", fnClick, false); //新增事件處理函數oDiv. ; // 與IE一樣,可以新增多個事件處理函數 oDiv.removeEventListener("onclick", fnClick, false); //移除事件處理函數如果使用addEventListener()將事件處理函數加入到捕獲階段,則必須在removeEventListener()中指明是捕獲階段,才能正確地將這個事件處理函數刪除oDiv.onclick = fnClick;oDiv.onclick = fnClickAnother; //使用直接賦值,後續的事件處理函數會覆寫前面的處理函數oDiv.onclick = fnClick;oDiv.addEventListener("onclick", fnClickAnother, false); //會依序調用,不會覆寫 Another, false); //會依序調用,不會覆寫3.瀏覽器物件模型(BOM)
BOM的核心是window,而有雙重存取瀏覽器視窗的一個接口,又是一個Global(全域)物件。這意味著在網頁中定義的任何對象,變數和函數,都以window作為其global對象。
3.1Window對象
Window 物件代表一個瀏覽器視窗或一個框架。
Window 物件會在
或以上是比較Javascript中BOM與DOM區別與聯繫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟,需要具體程式碼範例隨著網路和科技的快速發展,股票交易已成為許多投資者的重要途徑之一。而股票分析是投資人決策的重要一環,其中蠟燭圖被廣泛應用於技術分析。學習如何使用PHP和JS繪製蠟燭圖將為投資者提供更多直觀的信息,幫助他們更好地做出決策。蠟燭圖是一種以蠟燭形狀來展示股票價格的技術圖表。它展示了股票價格的

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest
