目錄
DOM
節點層次
Node型別
#Text類型
DocumentFragment類型
document.getBoundingClientRect()方法, 傳回一個矩形物件。包含4個屬性:left、top、right和bottom。這些屬性給出了元素在頁面中相對於視窗的位置。
首頁 web前端 js教程 關於DOM知識的詳細介紹

關於DOM知識的詳細介紹

Jun 26, 2017 am 11:52 AM
知識

DOM

我們知道,JavaScript是由ECMAScript + DOM + BOM組成的。 ECMAScript是JS中的一些語法,而BOM主要是瀏覽器物件(window)物件的一些相關知識的集合。而DOM,則是文檔物件相關的知識的集合。

我們知道,HTML和JS之間的互動是透過事件實現的。而DOM是針對HTML(XML)文件的一個API。因此,如果我們想要實現與使用者的交互,那麼就需要使用DOM提供的API,取得HTML元素,然後在該元素上綁定對應的事件,實現與使用者的交互。所以,對DOM的理解和掌握就顯得相當重要。

這篇文章主要基於《JavaScript高級程式涉及(三)》中的DOM相關章節,對DOM的主要知識作出一個梳理,並穿插我個人的一些理解。

節點層次

寫過HTML程式碼的地球人應該都知道,我們需要為每個元素新增縮進,然後在書寫相關的HTMl標籤和內容,最後顯示在網頁上。因此這種巢狀的HTML程式碼和內容就構成了節點層次。

對ECMAScript理解的地球人應該都知道,JS中的每一個物件都是基於一個引用類型創建的,而引用類型可以是JS原生提供的引用類型(Array、Function、RegExp、Object等等),也可以是自訂的參考類型(透過new關鍵字呼叫引用類型(也可以叫建構子))。而所有物件都是Object的實例對象,都可以繼承Object.prototype上的屬性和方法

而在DOM中,也同樣有這樣類似的機制。在DOM中,最頂層的類型是Node類型,其他所有節點都可以繼承Node類型下的屬性和方法。而Node型別其實相當於JS中的Object建構子。

既然如此,那就線看看Node類型下有哪些屬性和方法

Node型別

  • 屬性(在某個特定的節點透過繼承的方式呼叫下列屬性)

    • nodeType

    • ##nodeName

    • nodeValue

    • ·············

    • childNodes(指針,指向NodeList對象)

    • parentNodes

    • nextSibling

    • previousSibling

    • #firstChild

    • lastChild

    • #ownDocument(每個節點都只能屬於一個Document節點)

  • #方法(在某個特定的節點透過繼承的方式呼叫下列方法)

    • ··· 尋找節點···· ·

    • 查找元素的方法位於Document類型中

    • #························ ·······

    • ··· 插入節點···

    • appendChild(ele)

    • insertBefore(ele, target)

    • ························

    • ··· 刪除節點···

    • #removeChild(ele)

    • ········ ···················

    • #··· 取代節點···

    • #···取代節點···

    • # #replaceChild(ele, target)
    • ························

    • ################################################################### # #####··· 複製節點···############cloneNode(boolean) true: 表示深複製, false: 表示淺複製########## ##························#############···· 處理文件節點··· 很少用~############normalize()################Node類型上的屬性和方法也就那麼多了,再囉嗦一次,所有的其他節點都可以繼承Node類型上的屬性和方法######Document類型######JS透過Document類型表示文件。 document物件是HTMLDocument的一個實例,表示整個HTML頁面。同時,document物件也是window物件下的屬性,因此可以將其作為全域物件來存取。 ############屬性###############document.documentElement (表示HTML元素),同時可以透過document.childNodes[1]取得HTML元素# ###########document.body (表示body元素)############document.head (表示head元素)########### #document.compatMode (表示瀏覽器採用哪一種渲染方式,'CSS1Compat'表示標準模式, 'BackCompat'表示混雜模式)############document.charset (表示文件中實際使用的字元集,也可用來指定新字元集)############document.dataset (表示透過dataset存取自訂屬性,如document.dataset.myname)######### ####document.docType (表示元素), 存在瀏覽器相容性問題#############document.title (表示< title > 元素)######### ####··· 網頁請求···############document.URL (取得URL位址)############document.domain (取得URL中的域名,pathname)###
    • document.attributes (取得某個節點的屬性,傳回NamedNodeMap對象,與NodeList類似)

  • 方法

    • #··· 尋找元素···

    • #document.getElementById(id) 傳回該元素

    • document.getElementsByTagName(classname) 傳回包含零個或多個元素的HTMLCollection對象,與NodeList物件相似

    • ##document.getElementsByName(ele)傳回帶有給定name屬性的元素,同樣回傳HTMLCollection物件

    • document.getElementsByClassName(className) 傳回所有符合的NodeList物件(

      可在Document類型、Element類型上呼叫該方法)

    • document.querySelector(selector) selector表示CSS選擇子傳回與該模式相符的第一個元素,如果沒有找到,傳回null (

      Document類型, DocumentFragment類型, Element類型都可以呼叫此方法)

    • document.querySelectorAll(selector) selector表示CSS選擇符傳回一個符合成功的NodeList物件(

      Document類型, DocumentFragment類型, Element類型都可以呼叫此方法)

    • ··· 建立元素···

    • document.createElement() (建立好的元素處於遊離狀態,需要透過appendChild插入)

    • ··· 建立文字節點···

    • document.createTextNode() (創建好的元素處於遊離狀態,需要透過appendChild插入)

    • ··· 決定元素大小···

    • document.getBoundingClientRect()

Element類型

  • 屬性

    • ##id
    • #title
    • lang
    • #className
  • #方法

    • getAttribute(ele) 取得某個屬性

    • setAttribute(name, value) 設定某個屬性

    • removeAttribute(ele) 移除某個屬性

    • getElementsByTagName(ele) 取得標籤名為ele的元素

#Text類型

  • 屬性

    • #nodeValue | data (存取Text節點中的文字)

DocumentFragment類型

#使用:離線操作DOM元素,避免DOM節點大量的重排和重繪,造成效能問題

  • 方法

    • document.createDocumentFragment() (表示建立文件片段)

##NodeList物件

瞭解NodeList 及其「近親」NamedNodeMap 和HTMLCollection,是從整體上透徹理解DOM 的關鍵所在。這三個集合都是「動態的」;換句話說,每當文件結構發生變化時,它們都會得到更新。因此,它們總是會保存著最新、最準確的資訊。從本質上來說,所有NodeList 物件都是在存取 DOM 文件時即時執行的查詢。

元素大小

偏移量(offset dimension)

要想知道某個元素在頁面上的偏移量,將這個元素的offsetLeft 和offsetTop 與其offsetParent的相同屬性相加,如此循環直至根元素,就可以得到一個基本上準確的值。以下兩個函數就可以用來分別取得元素的左和上偏移。

function getElementLeft(element){
 var actualLeft = element.offsetLeft;
 var current = element.offsetParent;
 while (current !== null){
 actualLeft += current.offsetLeft;
 current = current.offsetParent;
 }
 return actualLeft;
}

function getElementTop(element){
 var actualTop = element.offsetTop;
 var current = element.offsetParent;
 while (current !== null){
 actualTop += current. offsetTop;
 current = current.offsetParent;
 }
 return actualTop;
}
登入後複製
客戶區大小(client dimension)

要確定瀏覽器視窗大小,可以使用 document.documentElement 或 document.body(在IE7 之前的版本中)的clientWidth 和 clientHeight。

function getViewport(){
 if (document.compatMode == "BackCompat"){
 return {
 width: document.body.clientWidth,
 height: document.body.clientHeight
 };
 } else {
 return {
 width: document.documentElement.clientWidth,
 height: document.documentElement.clientHeight
 };
 }
}
登入後複製
捲動大小(scroll dimension)

·················

##確定元素大小

document.getBoundingClientRect()方法, 傳回一個矩形物件。包含4個屬性:left、top、right和bottom。這些屬性給出了元素在頁面中相對於視窗的位置。

以上是關於DOM知識的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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)

帶你了解相當震撼的win10x系統知識 帶你了解相當震撼的win10x系統知識 Jul 14, 2023 am 11:29 AM

  近日,網路中有win10X系統的最新鏡像下載流出,不同於常見的ISO,此次的鏡像是.ffu格式,目前僅能用於SurfacePro7體驗。雖然很多小夥伴不能體驗,但依舊可以看看評測的相關內容,過過癮,那麼一起來看看win10x系統最新評測吧!win10x系統最新評測1、Win10X與Win10最大的不同首先就表現在開機後開始按鈕等被放在了任務欄中央,除了固定的應用程序,任務欄還可以顯示最近啟動的應用程序,類似於Android和iOS手機。  2、另外一個就是,新系統的「開始」選單不支援文

聊天機器人是如何透過知識圖譜回答問題的? 聊天機器人是如何透過知識圖譜回答問題的? Apr 17, 2023 am 09:13 AM

前言1950年,圖靈發表了具有里程碑意義的論文《計算機器與智能》(ComputingMachineryandIntelligence),提出了一個關於機器人的著名判斷原則——圖靈測試,也被稱為圖靈判斷,它指出如果第三者無法辨別人類與AI機器反應的差別,則可以論斷該機器具備人工智慧。 2008年,漫威《鋼鐵人》中的AI管家賈維斯,讓人們知道了AI是如何精準地幫助人類(東尼)解決丟過來的各種事務的…圖1:AI管家賈維斯(圖片來源網路)2023年初,以2C的方式從科技界火爆破圈的免費聊天機器人Chat

了解Golang:開發者必備知識 了解Golang:開發者必備知識 Feb 23, 2024 am 10:51 AM

Golang,又稱為Go語言,是一種由Google開發的開源程式語言。自2007年發布以來,Golang在軟體開發領域逐漸嶄露頭角,得到了越來越多開發者的青睞。作為一種靜態類型、編譯型語言,Golang擁有許多優點,如高效的並發處理能力、簡潔的語法、強大的工具支援等,使其在雲端運算、大數據處理、網路程式設計等方面具有廣泛應用前景。本文將介紹Golang的基本概念、

我們一起聊聊知識抽取,你學會了嗎? 我們一起聊聊知識抽取,你學會了嗎? Nov 13, 2023 pm 08:13 PM

一、簡介知識抽取通常指從非結構化文字中挖掘結構化訊息,例如含有豐富語意資訊的標籤和短語。這在業界被廣泛應用於內容理解和商品理解等場景,透過從用戶生成的文本資訊中提取有價值的標籤,將其應用於內容或商品上知識抽取通常伴隨著對所抽取標籤或短語的分類,通常被建模為命名實體識別任務,通用的命名實體識別任務就是識別命名實體成分並將成分劃分到地名、人名、機構名等類型上;領域相關的標籤詞抽取將標籤詞識別並劃分到在領域自訂的類別上,如係列(空軍一號、音速9)、品牌(Nike、李寧)、類型(鞋、服裝、數位)、風格(

了解Linux伺服器安全:必備的知識與技能 了解Linux伺服器安全:必備的知識與技能 Sep 09, 2023 pm 02:55 PM

了解Linux伺服器安全:必備的知識和技能隨著網路的不斷發展,Linux伺服器越來越廣泛地應用於各個領域。然而,由於伺服器儲存了大量的敏感數據,其安全性問題也成為了人們關注的焦點。本文將介紹一些必備的Linux伺服器安全知識和技能,幫助您保護您的伺服器免受攻擊。更新及維護作業系統及軟體及時更新作業系統及軟體是維持伺服器安全的重要一環。因為每個作業系統和軟體

掌握HTML全域屬性的關鍵知識與實務技巧 掌握HTML全域屬性的關鍵知識與實務技巧 Jan 06, 2024 am 08:40 AM

學習HTML全域屬性的必備知識與實踐技巧HTML(HyperTextMarkupLanguage)是一種用來建立網頁結構的標記語言。在建立網頁時,我們常常需要使用各種標籤和屬性來定義頁面的外觀與行為。而在所有的HTML屬性中,全域屬性是一類非常重要的屬性,它們可以應用於所有的HTML標籤,為網頁開發者提供了強大的彈性和自訂能力。在學習和使用HTML全

深入了解jQuery兄弟節點的相關知識 深入了解jQuery兄弟節點的相關知識 Feb 27, 2024 pm 06:51 PM

毫無疑問,jQuery是前端開發中最常用的JavaScript程式庫之一,它提供了簡潔而強大的方法來操作HTML文件。在jQuery中,兄弟節點是指與指定元素有相同父元素的元素。深入了解jQuery兄弟節點的相關知識對於前端開發者來說是至關重要的。本文將介紹如何使用jQuery來操作兄弟節點,並附上具體的程式碼範例。 1.查找兄弟節點在jQuery中,我們可以透過

必學的JSP內建物件知識:了解jsp中常用的內建物件有哪些 必學的JSP內建物件知識:了解jsp中常用的內建物件有哪些 Jan 10, 2024 pm 04:39 PM

學習JSP內建物件的必備知識:掌握jsp中的內建物件有哪些,需要具體程式碼範例JSP(JavaServerPages)是一種動態網頁開發技術,其優點在於結合了動態程式語言(如Java)和靜態頁面的特點。在JSP中,內建物件起著重要的作用,方便開發人員進行資料處理和頁面渲染。本文將介紹一些常用的JSP內建對象,同時提供具體的程式碼範例來加深理解。 request對

See all articles