首頁 web前端 js教程 JavaScript文檔物件模型-DOM擴充

JavaScript文檔物件模型-DOM擴充

Jan 20, 2017 pm 02:44 PM

根據W3C對DOM的要求,瀏覽器可以自行為它添加屬性和方法,以增強其功能。新增加的部分功能是為了向後相容,而另一些功能則是根據開發人員的回饋,這對常見問題而添加的。

 呈現模式

從IE6開始,IE瀏覽器區分標準模式和混雜模式,這就需要我們在使用的時候區分瀏覽器處於何種模式下。 IE為document物件新增了一個名為compatMode的屬性,這個屬性的唯一任務就是辨識瀏覽器處於什麼模式下。例如下面的例子,如果是標準模式,則document.compatMode的值等於「CSS1Compat」;如果是混雜模式,document.compatMode的值等於「BackCompat」。

if(document.compatMode == "CSS1Compat"){
    alert("标准模式");
}else{
    alert("混杂模式");
}
登入後複製

在IE之後,Firefox、Chrome和Opera瀏覽器也都實現了這個屬性。 Safari瀏覽器從3.1版本開始實作document.compatMode屬性。

後來,IE8又為document物件引入一個名為documentMode的新屬性。它的用法如下所示。

if(document.compatMode > 7){
    alert("IE8+ 标准模式");
}
登入後複製

這是因為IE8有3種不同的呈現模式,引入這個屬性正是為了區分這些模式。這個屬性的值如果是5,則表示混雜模式(即IE5模式),如果值為7,則表示IE7仿真模式,如果是8,則表示IE8標準模式。

 contains()方法

我們在操作DOM的時候常常需要判斷某個給定的節點是不是另外一個節點的後代節點。 IE瀏覽器最先引入了一個contains()方法,該方法可以在不遍歷整個DOM樹的情況下就可取得該資訊。 contains()方法應該在作為搜尋起點的祖先節點上調用,該方法接收一個參數,即要偵測的後代節點。如果傳入的節點是目前節點的後代,那麼會回傳true,否則回傳false。例如

alert(document.documentElement.contains(document.body));   //true
登入後複製

上面的範例測試元素是不是元素的後代,如果是格式正確的HTML頁面,那麼它就會回傳true。

IE,Safari3+,Opera8+和Chrome瀏覽器都支援contains()方法。

Firefox瀏覽器不支援contains()方法,但是Firefox在DOM3級中實作了一個替代的方法:compareDocumentPosition()方法。 (Opera9.5+的瀏覽器也支援此方法)。這個方法用來確定兩個節點之間的關係,傳回一個表示該關係的位元遮罩(bitmark)。下表中列出了這個位元遮罩的值。

JavaScript文檔物件模型-DOM擴充


如果需要模仿contains()方法,那麼應該要關注的是掩碼16。可以對compareDocumentPosition()方法的結果執行位元與操作,以確定參考節點(呼叫compareDocumentPosition()方法的目前節點)是否包含給定的節點(作為參數傳入的節點)。例如下面的例子:

var result = document.documentElement.compareDocumentPosition(document.body);
console.info("result="+result);
console.info("按位与操作后的布尔值结果为:"+!!(result & 16));
登入後複製

JavaScript文檔物件模型-DOM擴充

上面的程式碼在執行compareDocumentPosition()方法後,得到的結果為20,表示「居後」的4和「被包含」的16。然後對掩碼16進行位元與操作會傳回一個非零數值。兩個邏輯非操作符的作用是將數值轉換為布林值類型。

我們可以透過瀏覽器的能力來偵測來寫一個通用的contains()函數。

/*********************************************************/
/* 浏览器通用contains()方法
/* 参数:refNode - 参考节点 */
/* 参数:otherNode - 要检测的节点 */
/* 返回值: refNode包含otherNode是返回true,否则返回false*/
/*********************************************************/
function contains(refNode,otherNode){
    if(typeof refNode.contains == "function"){
        return refNode.contains(otherNode);
    }else if(typeof refNode.compareDocumentPosition == "function"){
        return !!(refNode.compareDocumentPosition(otherNode) & 16);
    }else{
        var node = otherNode.parentNode;
        do{
            if (node === refNode) {
                return true;
            }else{
                node = node.parentNode;
            }
        }while(node !== null);
        return false;
    }
}
登入後複製

這個通用contains()函數使用3種方法來決定某個節點是不是另外一個節點的後代節點。函數的第一個參數是參考節點,第二個參數是要偵測的節點。

在函數體內,首先檢測refNode中是否存在contains()方法,接下來檢測是否有compareDocumentPosition()方法,函數的最後一步是從otherNode開始向上遍歷DOM樹,遞歸獲取parentNode並檢查是否和refNode相等。在文檔樹的頂端,parentNode的值等於null,於是迴圈結束。

以上就是JavaScript文檔物件模型-DOM擴充的內容,更多相關內容請關注PHP中文網(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

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

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

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

如何利用JavaScript和WebSocket實現即時線上點餐系統 如何利用JavaScript和WebSocket實現即時線上點餐系統 Dec 17, 2023 pm 12:09 PM

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

如何使用WebSocket和JavaScript實現線上預約系統 如何使用WebSocket和JavaScript實現線上預約系統 Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

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

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

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

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript與WebSocket:打造高效率的即時影像處理系統 JavaScript與WebSocket:打造高效率的即時影像處理系統 Dec 17, 2023 am 08:41 AM

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數

See all articles