DOM系列:浏览器与DOM 主标签

最近回过头来在学习JavaScript中的DOM知识,随着学习进度的向前推移,越发感觉DOM知识点较多。为了能更好的系统了解清楚DOM相关的知识,我打算重新将DOM的学习划入到DOM系列当中。那么今天将是这个系列的第一篇。你将了解到DOM是什么,为什么它有用,以及如何与将来在教程中所做的一切联系起来。

JavaScript的API

在JavaScript语言的核心功能上提供的应用程序编程接口,简称API的功能会提供额外的超能力给我们使用。API是已经建立好的一套代码组件,目的是让开发者可以实现除此之外很难甚至不可能实现的程序。它们的作用就像是已经制作好的家具套件对家居建设的作用一样 —— 从一堆已经切好的木板开始组装一个书柜,显然比自己设计,寻找合适的木材,裁切至合适的大小和形状,找到合适大小的螺丝钉,然后组装成一个书柜要简单得多。

JavaScript的API通常分成两个类:

image

而我们这个时候只关注浏览器API。

浏览器API已经安装在浏览网页的浏览器中,而且能够从周围的计算机环境中揭露数据,或者做有用的复杂事情。比如我们要学习的DOM。它就是浏览器API中的文档对象模型API,允许你操作HTML和CSS,创建、移除和修改HTML,动态地应用新的样式到Web页面等等。

什么是HTML,CSS和JavaScript

在我们开始真正学习DOM之前,让我们快速地看看一些你可能已经知道的东西。

首先,在HTML文档中放入的内容是围绕HTML、CSS和JavaScript进行的。我们将这三者视为平等的合作伙伴,将在你的浏览器中建立你所看到的:

image

HTML、CSS和JavaScript三者都扮演着重要的角色,每个角色扮演的角色都非常不同。

  • HTML是一种标记语言,用来结构化我们的网页内容和赋予内容含义,例如定义段落、标题、和数据表,或在页面中嵌入图片和视频。

  • CSS 是一种样式规则语言,我们将样式应用于我们的 HTML 内容, 例如设置背景颜色和字体,在多个列种布局我们的内容。

  • JavaScript 是一种编程语言,允许你创建动态更新的内容,控制多媒体,图像动画,和一些其他的东西。好吧,虽然不是一切,但是它的神奇之处是你能够用几行JavaScript代码就能实现。

HTML定义了结构

HTML定义了页面的结构,通常包含了你所看到的内容:

<pre class="" style="margin: 0px; padding: 0.5em; max-width: 100%; box-sizing: inherit; word-wrap: break-word !important; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 0.544px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; overflow: auto; font-family: monospace, monospace; font-size: 14px; background-color: rgb(0, 43, 54); color: rgb(131, 148, 150);">

<!DOCTYPE html><html>
<head>
<meta content="DOM, JavaScript, W3cplus" name="keywords">
<meta content="DOM系列,浏览器和DOM!" name="description">
<title>LOL! Sea Otter! Little Kid!</title>
<link href="style.css" rel="stylesheet"/>
</head>

<body>
    <div id="container">
        <img src="w3cplus_logo.png"/>
        <h1>DOM系列学习!</h1>
        <p class="bodyText">开始学习DOM,这是一个有关于DOM学习的系列教程...<p>
        <div class="submitButton">next</div>
    </div>
    <script src="main.js"></script>
</body> </html>

</pre>

HTML本身就像Meg Griffin的家庭成员一样,很无聊。如果你不知道Meg是谁,也懒得去Googl,那下图就是她的样式:

image

无论如何,你也希望看到乏味的HTML文档。为了将你的内容从简单单调的东西转换成吸引人的东西,那就需要添加CSS。

CSS是来美化Web页面的

CSS是你的主要样式语言,允许你给HTML元素添加布局和美化,让Web页面更具吸引力:

image

在很常的时间里,HTML和CSS成了你所需要的东西,用于创建一个漂亮的外观和功能的页面。有结构、有布局、有导航。甚至可以进行简单的交互,比如鼠标悬浮翻转的效果。是不是觉得很幸福,很美好。

JavaScript在Web页面上做什么

JavaScript是允许你在网页中实现复杂事情的一门编程语言 —— 每次当你浏览网页时不只是显示静态信息 —— 显示即时更新的内容,或者交互式的地图,或2D、3D图形动画,又或者自动播放视频等,你可以确信JavaScript参与其中。

在确实查看一些代码之前,咱们先探索当你的页面上运行JavaScript的时候实际发生了什么?咱们先来简单的回顾当你在浏览器中加载一个Web网页时发生什么?浏览器中读取一个网页,其实浏览器就运行了你的代码,即组成Web页面的三大核心,HTML、CSS和JavaScript。而此时的浏览器好比一个工厂,获取原材料(代码)然后生产出一个产品(Web页面)。

image

在 HTML 和 CSS 已经被集合和组装成一个网页后,浏览器的 JavaScript 引擎执行 JavaScript。这保证了当 JavaScript 开始运行时,网页的结构和样式已经在该出现的地方了。

这是一个好事情,正如 JavaScript 的普遍用处是通过 DOM API(如之前提及的那样)动态地修改 HTML 和 CSS 来更新用户交界面。如果 JavaScript 在 HTML 和 CSS 加载完成之前加载运行,那么会发生错误。

初遇DOM

浏览器显示的是一个Web文档。更具体地说,要总结前面提到的HTML、CSS和JavaScript,它们共同创建了所显示的内容。浏览器呈现给用户的是一个表面上的东西,我们需要深挖一步,看看其幕后的东西 —— 层次结构,浏览器也会使用它来理解正在发生的一切。

这个层次结构被称为文档对象模型(Document Object Model),大家更喜欢叫它DOM。下面是对应前面示例的HTML的DOM视图:

image

尽管这个结构示意图是简化后的,但适用于所有DOM结构的情况下。从上图可以看出来,DOM实际上是由HTML元素和其他的多种类型组成的。所有组成DOM的东西被称为DOM节点

这些节点可以是元素、属性、文本内容、注释、文档相关的内容以及其他你根本没有想到的东西。而我们更为关心的一种节点是元素类型,因为这是我们99%的时间所要处理的。

你想要访问的每个HTML元素都有一个与之相关联的特定类型,并且所有这些类型都从组成所有节点的节点基础扩展:

image

HTML元素位于一个以Node开头的链的末端,并在以一个类型结束之前继续使用HTMLHTMLElement(比如HTMLDivElementHTMLHeadingElement等),它与HTML元素本身相匹配。在该链路的某些部分中,将介绍用于操作HTML元素的属性和方法。

在我们使用DOM来修改HTML元素之前,让我们先来了解两个特殊对象。

window对象

JavaScript语言最初是为Web浏览器创建的。从那时起,它已经发展成为一种有许多用途和平台的语言。而接下来所要说的浏览器就是这个平台之一。JavaScript规范调用了一个宿主环境(其实就是浏览器)。

宿主环境为语言核心提供了特定于平台的对象和函数。Web浏览器提供了一种控制Web页面的方法。Node.js提供服务器端的特性等等。但我们接下来很长的一段时间要学习的和了解的都只是涉及Web浏览器控制页面的方法。

有关于JavaScript在Web浏览器中运行时的鸟瞰图,可以用下图来描述:

image

其中window是一个根对象。他有两个角色:

  • 首先,它是JavaScript代码的全局对象

  • 其次,它代表了浏览器窗口,并提供了控制它的方法

window 对象表示一个包含DOM文档的窗口,其 document 属性指向窗口中载入的 DOM文档。在标签浏览器中,每个标签具有自己的 window 对象。也就是说,同一个窗口的标签之间不会共享一个 window 对象。其次,window对象有很多对应的方法、属性和事件。可以在浏览器开发者工具中,输入window,查看到window所有的东西,比如下图所示的(只截取了其中的一部分):

image

前面提到,window可以作来一个全局对象,它可以下面这样使用:

<pre class="" style="margin: 0px; padding: 0.5em; max-width: 100%; box-sizing: inherit; word-wrap: break-word !important; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 0.544px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; overflow: auto; font-family: monospace, monospace; font-size: 14px; background-color: rgb(0, 43, 54); color: rgb(131, 148, 150);">

function sayHi() {
console.log('Hi, 大漠!')
}
// 全局函数可以作为window的属性访问 window.sayHi()

</pre>

事实上,通过window对象你可以做很多的事情,比如访问当前URL、本地存储、屏幕信息、移动滚动条、设置状态栏文本等等。

document对象

document对象是一个很有趣的东西,这也是我们将会花一些时间集中探讨的一个对象。类似于window一样,咱们可以先在浏览器控制台上输入document,回车,看看输出的结果:

image

正如上图所示,document对象是所有HTML元素的网关,这些元素构成了Web页面显示的内容。要记住的是,document对象并不仅仅表示HTML文档的只读版本,这一点在将来的教程中更有意义。这是一个双向的通道,你可随意的阅读和操作你的文件。

通过JavaScript对DOM做出的任何更改都会在浏览器中反映出来,即页面的内容会立马更新。这意味着可以动态地添加、删除、移动和修改元素以及它们的属性,也可以给元素添加一些内联的CSS样式以及执行各种其他的功能。如果你想要使用JavaScript,可以在HTML中通过<script>标签来添加JavaScript代码或引用.js文件。如果使用得当,这是一个相当强大的功能。例如:

<pre class="" style="margin: 0px; padding: 0.5em; max-width: 100%; box-sizing: inherit; word-wrap: break-word !important; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: 0.544px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; overflow: auto; font-family: monospace, monospace; font-size: 14px; background-color: rgb(0, 43, 54); color: rgb(131, 148, 150);">

// 修改body元素的背景色为红色 document.body.style.backgroundColor = 'red' // 1s之后再把body元素的背景色变成黑色 setTimeout(() => {
document.body.style.backgroundColor = 'black' }, 1000)

</pre>

image

这里使用document.body.style,但事实上document还有很多属性和方法。相关的属性和方法可有通过下面的规范来查阅:

  • W3C中DOM规范

  • WhatWG中DOM规范

事实上,这是两组人,他们的意见并不总是相同的,所以这两套看上去就是两套标准。但它们之间又非常相似,最终会合并。

在过去,根本没有标准 —— 每个浏览器都实现了它想要的功能。不同的浏览器对相同的东西有不同的集合、方法和属性,开发人员必须为每个浏览器做兼容处理,编写不同的代码,这是非常蛋疼的时代。

即使是现在,我们有时候也能遇到使用浏览器特定性属笥的旧代码,并在不兼容的情况下工作。但是,在本系列教程中,我们将使用现代码的东西,不将考虑任何浏览器兼容的事情。

document对象的另一个方面内容是与事件相关的。这个将会放到后续的内容来介绍。这里不做过多的阐述。

总结

DOM是用于处理HTML文档的最重要的功能。它将HTML、CSS和JavaScript联系起来。它还提供了对documentwindow对象的访问级别。

这篇文章只是了解了DOM中最简单,最基础的一部分。实际上,使用它的功能与你的Web文档交互是更大更有趣的部分。不过这将是后面要了解的东西,因为在深入探讨这部分之前,我们需要先了解DOM的一些基础和概念,只有这样才能发挥DOM的强大优势,更好的帮助我们操作Web页面或者说Web应用程序。

我是这方面的初学者,也是初次整理DOM系列相关的教程,如果有不对之处,还请各位多多指正。当然,如果您愿意分享这方面的经验,我们期待您在下面的评论中分享。帮助我和像我这样的初学者更好的成长。

最后需要声明,文章中有些图片是通过Google搜索来的,在使用的地方未标注出处地址,如果有侵权或影响到您的利益,烦请告之,我将会相应的删除。跪谢!

提前预告一下,下一节,我们将围绕着DOM树进行学习和探讨,感兴趣的同学,欢迎持续关注这个系列的相关更新!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,088评论 1 45
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 8,602评论 0 3
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,424评论 1 11
  •   DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。   DOM 描绘...
    霜天晓阅读 3,562评论 0 7
  •   DOM 1 级主要定义的是 HTML 和 XML 文档的底层结构。   DOM2 和 DOM3 级则在这个结构...
    霜天晓阅读 1,363评论 1 3