搜尋
首頁web前端html教學一個完整的HTML物件是什麼樣的,如何產生?

對html對象,首先要先提到Node節點,Node是一個接口,許多DOM類型從這個接口繼承,並允許類似地處理(或測試)這些各種類型。有那些介面重Node繼承其方法和屬性?先看看本文章吧。 apache php mysql

為何寫這篇文章?

你可能做Web開發已經有一段時間,你有沒有想過下列問題呢?
為什麼p元素甚至是所有的html元素都可以使用addEventListener來新增事件?
為什麼每個DOM節點都有parentNode、firstChild、nodeType等屬性呢?
為什麼每個DOM元素都有className、classList、innerHTML等屬性呢?
為什麼有些DOM元素有accessKey、contentEditable、isContentEditable等屬性呢?
為什麼每個DOM元素都有onclick、ondblclick、ondrag等屬性?
本文就是來解答這些簡單又不「簡單」的問題。

EventTarget

定義

EventTarget 是一個由可以接收事件的物件實現的接口,並且可以為它們建立偵聽器。

作用

Element,document 和 window 是最常見的事件目標,但其他物件也可以是事件目標,例如XMLHttpRequest,AudioNode,AudioContext 等等。
許多事件目標(包括元素,文件和 window)也支援透過 onXXX(如onclick) 屬性和屬性設定事件處理程序。

該介面的方法

EventTarget.addEventListener()

在EventTarget上註冊特定事件類型的事件處理程序。

EventTarget.removeEventListener()

EventTarget中刪除事件偵聽器。

EventTarget.dispatchEvent()

將事件分派到此EventTarget。

我們自己實作EventTarget

var EventTarget = function() {
  this.listeners = {};
};

EventTarget.prototype.listeners = null;
EventTarget.prototype.addEventListener = function(type, callback) {
  if (!(type in this.listeners)) {
    this.listeners[type] = [];
  }
  this.listeners[type].push(callback);
};

EventTarget.prototype.removeEventListener = function(type, callback) {
  if (!(type in this.listeners)) {
    return;
  }
  var stack = this.listeners[type];
  for (var i = 0, l = stack.length; i < l; i++) {
    if (stack[i] === callback){
      stack.splice(i, 1);
      return;
    }
  }
};

EventTarget.prototype.dispatchEvent = function(event) {
  if (!(event.type in this.listeners)) {
    return true;
  }
  var stack = this.listeners[event.type].slice();

  for (var i = 0, l = stack.length; i < l; i++) {
    stack[i].call(this, event);
  }
  return !event.defaultPrevented;
};

Node

定義

#Node是一個接口,許多DOM類型從這個介面繼承,並允許類似地處理(或測試)這些各種類型。 Node是一個接口,許多DOM類型從這個接口繼承,並允許類似地處理(或測試)這些各種類型。

有那些介面重Node繼承其方法和屬性?

Document, Element, CharacterData (which Text, Comment, and CDATASection inherit), ProcessingInstruction, DocumentFragment, DocumentType, Notation, Entity, EntityReference
PS:在方法和屬性不相關的特定情況下,這些介面可能傳回null。它們可能會拋出異常 - 例如,當子節點添加到不允許子節點存在的節點時。

介面相關的屬性和方法

屬性

Node.baseURI

傳回一個表示base URL的DOMString。不同語言中的base URL的概念都不一樣。在HTML中,base URL表示協定和域名,以及一直到最後一個'/'之前的文件目錄。

Node.childNodes

傳回一個包含了該節點所有子節點的即時的NodeList。 NodeList 是「即時」的意思是,如果該節點的子節點發生了變化,NodeList物件就會自動更新。

Node.firstChild

傳回該節點的第一個子節點,如果該節點沒有子節點則傳回null。

Node.lastChild

傳回該節點的最後一個子節點,如果該節點沒有子節點則傳回null。
此處省略若干Node介面屬性,更多屬性查看這裡。

方法

那麼重點來了!
重點:從其父類別EventTarget繼承了addEventListener、removeEventListener、dispatchEvent等方法。

Node.appendChild()

將一個節點加入到指定父節點的子節點清單結尾。

Node.contains()

傳回的是一個布林值,來表示傳入的節點是否為該節點的後代節點。

Node.cloneNode()

傳回呼叫該方法的節點的副本。
此處省略若干Node介面方法,更多方法查看這裡。

Element

說明

Element是非常通用的基類,所有 Document物件下的物件都繼承它。這個介面描述了所有相同種類的元素所普遍具有的方法和屬性。這些繼承自Element並且增加了一些額外功能的介面描述了特定的行為。
PS:HTMLElement 接口是所有HTML元素的基礎接口, 而 SVGElement 接口是所有SVG元素的基本接口。
在web以外的語言,像 XUL 可以透過 XULElement 的API,也能實現它。

屬性

所有屬性繼承至它的祖先介面Node, 和它所擴展的介面EventTarget, 並且從以下部分繼承了屬性ParentNode, ChildNode, NonDocumentTypeChildNode, 和Animatable.

Element.assignedSlot

傳回元素對應的HTMLSlotElement 介面

#Element.attributes

傳回一個與該元素相關的所有屬性集合NamedNodeMap

Element.classList

傳回該元素所包含的class屬性是一個DOMTokenList.

Element.className

它是一個DOMString 表示這個元素的class.
此處省略若干Element介面屬性,更多方法查看這裡。

方法

那麼重點來了!
從它的父類別(Node)和它父類別的父類別(EventTarget)繼承方法,並實作parentNode、ChildNode、NonDocumentTypeChildNode、Animatable。
此處省略若干Element介面方法,更多方法查看這裡。

Element.closest()

方法用來取得符合特定選擇器且離目前元素最近的祖先元素(也可以是目前元素本身)。如果匹配不到,則傳回 null。

Element.getAttribute()

傳回元素上一個指定的屬性值。如果指定的屬性不存在,則傳回  null 或 "" (空字串)。

Element.getElementsByClassName()

參數中給出類別的列表,傳回一個動態的 HTMLCollection ,這裡麵包含了所有持有這些類別的後代元素。
此處省略若干Element介面方法,更多方法查看這裡。

HTMLElement

作用

HTMLElement 介面表示所有的 HTML 元素。有些HTML元素直接實作了HTMLElement接口,其它的間接實作HTMLElement介面。

屬性

那麼重點來了!
繼承自父介面Element和 GlobalEventHandlers的屬性。
HTMLElement.accessKey    DOMString    獲取/設定元素存取的快速鍵
HTMLElement.accessKeyLabel    DOMString    傳回一個包含元素存取的快速鍵的字串(唯讀)
HTMLElement.contentEtabletable 可獲取元素存取的快速鍵的字串編輯狀態
HTMLElement.isContentEditable Boolean    顯示元素的內容是否可編輯(唯讀)
此處省略若干HTMLElement介面屬性,更多方法查看這裡。

Event handlers

HTMLElement.onTouchStart
HTMLElement.onTouchEnd
HTMLElement.onTouchMove
HTMLElement.onTouchEnter
HTMLElement.onTouchLeave
HTMLElement.onTouchcelcelcel

方法

HTMLElement.blur()    void    元素失去焦點

HTMLElement.click()    void    觸發元素的點擊事件
HTMLElement.focus()      觸發元素的點擊事件
HTMLElement.focus()    void  #ML 元素獲得焦點。 forceSpellCheck()     void

GlobalEventHandlers

#定義

GlobalEventHandlers介面描述了事件處理程序像HTMLElement常見的幾個介面,檔案,視窗,或WorkerGlobalScope Web Workers。這些介面可以實作更多的事件處理程序。

屬性

GlobalEventHandlers.onabort

中斷事件。

GlobalEventHandlers.onblur

失去焦點事件。

GlobalEventHandlers.onfocus

取得焦點事件。

此處省略若干GlobalEventHandlers介面屬性,更多方法查看這裡。

元素介面

此介面用於建立對應的元素。

如:
HTMLpElement 介面提供了一些特殊屬性(它也繼承了通常的 HTMLElement 介面)來操作p元素。
HTMLFormElement介面可以建立或修改

物件;它繼承了HTMLElement介面的方法和屬性。
HTMLAnchorElement 介面表示超連結元素,並提供一些特別的屬性和方法(除了那些繼承自普通 HTMLElement物件介面的之外)以用於操作這些元素的佈局和顯示。
......
回答前面問題

透過上面的知識,我們了解到:

HTMLpElement(其他元素介面) 繼承 HTMLElement 和 GlobalEventHandlers 介面。
HTMLElement 繼承 Element 介面。
Element 繼承 Node 介面。
Node 繼承 EventTarget 介面。

為什麼p元素甚至是所有的html元素都可以使用addEventListener來新增事件? 一個完整的HTML物件是什麼樣的,如何產生?回答:從 EventTarget 介面中繼承而來。
為什麼每個DOM節點都有parentNode、firstChild、nodeType等屬性呢?
回答:從 Node 介面中繼承而來。
為什麼每個DOM元素都有className、classList、innerHTML等屬性呢?
回答:從 Element 介面繼承而來。
為什麼有些DOM元素有accessKey、contentEditable、isContentEditable等屬性呢?
回答:從 HTMLElement 介面繼承而來。
為什麼每個DOM元素都有onclick、ondblclick、ondrag等屬性?
回答:從 GlobalEventHandlers 介面中繼承而來。

那麼重點來了!

end:

只有透過上面的繼承關係,我們得到的DOM 元素才是完整的HTML 對象,我們才能為它設定/取得屬性、綁定事件、新增樣式類別等操作。

相關文章:

如何判斷一個js物件是否一個dom物件#

資料庫完整性是什麼概念?

相關影片:

HTML5 完整版手冊

以上是一個完整的HTML物件是什麼樣的,如何產生?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
為什麼HTML屬性對Web開發很重要?為什麼HTML屬性對Web開發很重要?May 12, 2025 am 12:01 AM

htmlattributesarecrucialinwebdevelopment forcontrollingBehavior,外觀和功能

Alt屬性的目的是什麼?為什麼重要?Alt屬性的目的是什麼?為什麼重要?May 11, 2025 am 12:01 AM

alt屬性是HTML中標籤的重要部分,用於提供圖片的替代文本。 1.當圖片無法加載時,alt屬性中的文本會顯示,提升用戶體驗。 2.屏幕閱讀器使用alt屬性幫助視障用戶理解圖片內容。 3.搜索引擎索引alt屬性中的文本,提高網頁的SEO排名。

HTML,CSS和JavaScript:示例和實際應用HTML,CSS和JavaScript:示例和實際應用May 09, 2025 am 12:01 AM

HTML、CSS和JavaScript在網頁開發中的作用分別是:1.HTML用於構建網頁結構;2.CSS用於美化網頁外觀;3.JavaScript用於實現動態交互。通過標籤、樣式和腳本,這三者共同構築了現代網頁的核心功能。

如何在標籤上設置lang屬性?為什麼這很重要?如何在標籤上設置lang屬性?為什麼這很重要?May 08, 2025 am 12:03 AM

設置標籤的lang屬性是優化網頁可訪問性和SEO的關鍵步驟。 1)在標籤中設置lang屬性,如。 2)在多語言內容中,為不同語言部分設置lang屬性,如。 3)使用符合ISO639-1標準的語言代碼,如"en"、"fr"、"zh"等。正確設置lang屬性可以提高網頁的可訪問性和搜索引擎排名。

HTML屬性的目的是什麼?HTML屬性的目的是什麼?May 07, 2025 am 12:01 AM

htmlattributeseresene forenhancingwebelements'functionalityandAppearance.TheyAdDinformationTodeFineBehavior,外觀和互動,使網站互動,響應式,visalalyAppealing.AttributesLikutesLikeSlikEslikesrc,href,href,href,類,類型,類型,和dissabledtransfransformformformformformformformformformformformformformformforment

您如何在HTML中創建列表?您如何在HTML中創建列表?May 06, 2025 am 12:01 AM

toCreateAlistInHtml,useforforunordedlistsandfororderedlists:1)forunorderedlists,wrapitemsinanduseforeachItem,RenderingeringAsabulletedList.2)fororderedlists,useandfornumberedlists,useandfornumberedlists,casundfornumberedlists,casundfornthetthetthetthetthetthetthetttributefordforderfordforderforderentnumberingsnumberingsnumberingStys。

HTML行動:網站結構的示例HTML行動:網站結構的示例May 05, 2025 am 12:03 AM

HTML用於構建結構清晰的網站。 1)使用標籤如、、定義網站結構。 2)示例展示了博客和電商網站的結構。 3)避免常見錯誤如標籤嵌套不正確。 4)優化性能通過減少HTTP請求和使用語義化標籤。

您如何將圖像插入HTML頁面?您如何將圖像插入HTML頁面?May 04, 2025 am 12:02 AM

toinsertanimageIntoanhtmlpage,usethetagwithsrcandaltattributes.1)usealttextforAcccessibilityandseo.2)instementRcsetForresponSiveImages.3)applylazyloadingWithLoadingWithLoading =“ lazy” tooptimizeperformance.4)tooptimizeperformance.4)

See all articles

熱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

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

熱門文章

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中