搜索
首页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.contentEditable    DOMString    获取/设置元素的可编辑状态
HTMLElement.isContentEditable Boolean    表明元素的内容是否可编辑(只读)
此处省略若干HTMLElement接口属性,更多方法查看这里。

Event handlers

HTMLElement.onTouchStart
HTMLElement.onTouchEnd
HTMLElement.onTouchMove
HTMLElement.onTouchEnter
HTMLElement.onTouchLeave
HTMLElement.onTouchCancel

方法

HTMLElement.blur()    void    元素失去焦点
HTMLElement.click()    void    触发元素的点击事件
HTMLElement.focus()    void    元素获得焦点
HTMLElement.forceSpellCheck()     void

GlobalEventHandlers

定义

GlobalEventHandlers接口描述了事件处理程序像HTMLElement常见的几个接口,文件,窗口,或WorkerGlobalScope Web Workers。这些接口可以实现更多的事件处理程序。

属性

GlobalEventHandlers.onabort

中断事件。

GlobalEventHandlers.onblur

失去焦点事件。

GlobalEventHandlers.onfocus

获取焦点事件。
此处省略若干GlobalEventHandlers接口属性,更多方法查看这里。

元素接口

该接口用于创建对应的元素。
如:
HTMLpElement 接口提供了一些特殊属性(它也继承了通常的 HTMLElement 接口)来操作p元素。
HTMLFormElement接口可以创建或者修改ff9c23ada1bcecdd1a0fb5d5a0f18437对象;它继承了HTMLElement接口的方法和属性。
HTMLAnchorElement 接口表示超链接元素,并提供一些特别的属性和方法(除了那些继承自普通 HTMLElement对象接口的之外)以用于操作这些元素的布局和显示。
......

回答前面问题

通过上面的知识,我们了解到:
HTMLpElement(其他元素接口) 继承 HTMLElement 和 GlobalEventHandlers 接口。
HTMLElement 继承 Element 接口。
Element 继承 Node 接口。
Node 继承 EventTarget 接口。
搜狗截图18年07月30日1717_17.png为什么p元素甚至是所有的html元素都可以使用addEventListener来添加事件呢?
回答:从 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,CSS和JavaScript的未来:网络开发趋势HTML,CSS和JavaScript的未来:网络开发趋势Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML:结构,CSS:样式,JavaScript:行为HTML:结构,CSS:样式,JavaScript:行为Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML的未来:网络设计的发展和趋势HTML的未来:网络设计的发展和趋势Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述HTML与CSS vs. JavaScript:比较概述Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML:是编程语言还是其他?HTML:是编程语言还是其他?Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。

HTML:建立网页的结构HTML:建立网页的结构Apr 14, 2025 am 12:14 AM

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

从文本到网站:HTML的力量从文本到网站:HTML的力量Apr 13, 2025 am 12:07 AM

HTML是一种用于构建网页的语言,通过标签和属性定义网页结构和内容。1)HTML通过标签组织文档结构,如、。2)浏览器解析HTML构建DOM并渲染网页。3)HTML5的新特性如、、增强了多媒体功能。4)常见错误包括标签未闭合和属性值未加引号。5)优化建议包括使用语义化标签和减少文件大小。

了解HTML,CSS和JavaScript:初学者指南了解HTML,CSS和JavaScript:初学者指南Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

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脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。