首页 Javascript_DOM编程艺术翻译版

Javascript_DOM编程艺术翻译版

举报
开通vip

Javascript_DOM编程艺术翻译版 第 3 章 DOM 本章内容 ● 节点的概念 ●四个非常实用的 DOM 方法: getElementById 、getElementsByTagName 、getAttribute 和 setAttribute 终于要与 DOM面对面了。能够向大家介绍 DOM是笔者的荣幸,我非常乐于带 领大家通过 DOM的眼睛去看世界。 3.1 文档: DOM 中的 “ D” DOM是“Document Object Model ”(文档对象模型)的首字母缩写。如果没 有 document(文档), DOM也就...

Javascript_DOM编程艺术翻译版
第 3 章 DOM 本章内容 ● 节点的概念 ●四个非常实用的 DOM 方法: getElementById 、getElementsByTagName 、getAttribute 和 setAttribute 终于要与 DOM面对面了。能够向大家介绍 DOM是笔者的荣幸,我非常乐于带 领大家通过 DOM的眼睛去看世界。 3.1 文档: DOM 中的 “ D” DOM是“Document Object Model ”(文档对象模型)的首字母缩写。如果没 有 document(文档), DOM也就无从谈起。当创建了一个网页并把它加载到 Web 浏览器中时, DOM就在幕后悄然而生。它将根据你编写的网页文档创建一个文档 对象。 在人类语言中,“对象”这个词的含义往往不那么明确和具体,它几乎可以 用来称呼任何一种客观存在的事物。 但在程序设计语言中, “对象”这个词的含 义非常明确和具体。 3.2 对象: DOM 中的 “ O” 在上一章的末尾,我们向大家展示了几个 JavaScript 对象的例子。你们应 该还记得,“对象” 是一种独立的数据集合 。与某个特定对象相关联的变量被称 为这个对象的属性;可以通过某个特定对象去调用的函数被称为这个对象的方 法。 JavaScript 语言里的对象可以分为三种类型: ●用户定义对象 (user-defined object ):由程序员自行创建的对象。 本 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 不讨论这种对象。 ●内建对象 (native object ):内建在 JavaScript 语言里的对象,如 Array 、Math 和 Date 等。 ●宿主对象 (host object ):由浏览器提供的对象。 在 JavaScript 语言的发展初期,程序员在编写 JavaScript 脚本时经常需要 用到一些非常重要的宿主对象,它们当中最基础的是 window对象。 window 对象对应着浏览器窗口本身,这个对象的属性和方法通常被统称为 B OM(浏览器对象模型)——但我觉得称之为 Window Object Model (窗口对象模 型)更为贴切。 BOM向程序员提供了 window.open 和 window.blur 等方法,你们 在上网冲浪时看到的各种弹出窗口和下拉菜单——其数量之多已经到了泛滥成 灾的地步——几乎都是由这些方法负责创建和处理的。难怪 JavaScript 会有一 个不好的名声! 值得庆幸的是,在这本书里我们不需要与 BOM打太多的交道。我们将把注意 力集中在浏览器窗口的内部而不是浏览器窗口本身。 我们将着重探讨如何对网页 的内容进行处理,而用来实现这一目标的载体就是 document对象。 在本书的后续内容里,我们将尽可能地只讨论 document 对象的属性和方法。 现在,我们已经对 DOM中的字母“ D”( document,文档)和字母“ O”( ob ject ,对象)做了解释,那么字母“ M”又代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 着什么呢? 3.3 模型: DOM 中的 “ M” DOM中的“ M”代表着“ Model”(模型),但说它代表着“ Map”(地图)也 未尝不可。 模型也好,地图也罢, 它们的含义都是某种事物的表现形式。 就像一 个模型火车代表着一列真正的火车、 一张城市街道图代表着一个实际存在的城市 那样, DOM代表着被加载到浏览器窗口里的当前网页:浏览器向我们提供了当前 网页的地图(或者说模型),而我们可以通过 JavaScript 去读取这张地图。 既然是地图,就必须有诸如方向、等高线和比例尺之类的记号。要想看懂和 使用地图,就必须知道这些记号的含义和用途——这个道理同样适用于 DOM。要 想从 DOM获得信息,我们必须先把各种用来表示和描述一份文档的记号弄明白。 DOM把一份文档表示为一棵树(这里所说的“树”是数学意义上的概念), 这是我们理解和运用这一模型的关键。更具体地说, DOM把文档表示为一棵家谱 树。 家谱树本身又是一种模型。家谱树的典型用法是表示一个人类家族的谱系并 使用 parent (父)、 child (子)、 sibling (兄弟)等记号来表明家族成员之 间的关系。家谱树可以把一些相当复杂的关系简明地表示出来: 一位特定的家族 成员既是某些成员的父辈, 又是另一位成员的子辈, 同时还是另一位成员的兄弟。 类似于人类家族谱系的情况,家谱树模型也非常适合用来表示一份用 (X)HTM L 语言编写出来的文档。 请看下面这份非常基本的网页,它的内容是一份购物清单。 这份文档可以用图 3-1 中的模型来表示。 我们来分析一下这个网页的结构。这种分析不仅可以让我们了解它是由哪些 元素构成的,还可以让我们了解为什么图 3-1 中的模型可以如此完美地把它表示 出来。在对 Doctype 做出声明后, 这份文档首先打开了一个 标签,而这个 网页里的所有其他元素都包含在这个元素里。 因为所有其他的元素都包含在其内 部,所以这个 标签既没有父辈, 也没有兄弟。如果这是一棵真正的树的话, 这个 标签显然就是树根。 图 3-1 把网页中的元素表示为一棵家谱树 这正是图 3-1 中的家谱树以 html 为根元素的原因。毫无疑问, html 元素完 全可以代表整个文档。 如果在这份文档里更深入一层,我们将发现 和两个分枝。它们 存在于同一层次且互不包含,所以它们是兄弟关系。它们有着共同的父元素 ,但又各有各的子元素,所以它们本身又是其他一些元素的父元素。 元素有两个子元素: (这两个元素是兄弟关系)。 < body>元素有三个子元素: <h1>、<p>和<ul> (这三个元素是兄弟关系)。如果继 续深入下去, 我们将发现 <ul> 也是一个父元素。 它有三个子元素, 它们都是 <li> 元素。 利用这种简单的家谱关系记号,我们可以把各元素之间的关系简明清晰地表 达出来。 例如, <h1>和<ul> 之间是什么关系?答案是它们是兄弟关系。 那么 <body>和<ul> 之间又是什么关系? <body>是<ul> 的父元素, <ul> 是<bod y>的一个子元素。 如果把各种文档元素想像成一棵家谱树上的各个节点的话,我们就可以用同 样的记号来描述 DOM。不过,与使用“家谱树”这个术语相比,把一份文档称为 一棵“节点树”更准确。 3.3.1 节点 节点( node)这个名词来自网络理论,它代表着网络中的一个连接点。网络 是由节点构成的集合。 在现实世界里,一切事物都由原子构成。原子是现实世界的节点。但原子本 身还可以进一步分解为更细小的亚原子微粒。这些亚原子微粒同样是节点。 DOM也是同样的情况。文档也是由节点构成的集合,只不过此时的节点是文 档树上的树枝和树叶而已。 在 DOM里存在着许多不同类型的节点。就像原子包含着亚原子微粒那样,有 些 DOM节点类型还包含着其他类型的节点。 1. 元素节点 DOM的原子是元素节点( element node )。 在描述刚才那份“购物清单”文档时,我们使用了诸如 <body>、<p>和<ul> 之类的元素。如果把 Web上的文档比作一座大厦, 元素就是建造这座大厦的砖块, 这些元素在文档中的布局形成了文档的结构。 各种标签提供了元素的名字。文本段落元素的名字是“ p”,无序清单元素 的名字是“ul ”,列表项元素的名字是“ li ”。 元素可以包含其他的元素。在我们的“购物清单”文档里,所有的列表项元 素都包含在一个无序清单元素的内部。 事实上,没有被包含在其他元素里的唯一 元素是 <html> 元素。它是我们的节点树的根元素。 2.文本节点 元素只是不同节点类型中的一种。如果一份文档完全由一些空白元素构成, 它将有一个结构, 但这份文档本身将不会包含什么内容。 在网上,内容决定着一 切,没有内容的文档是没有任何价值的,而绝大多数内容都是由文本提供的。 在“购物清单”例子里, <p>元素包含着文本“ Don’t forget to buy this stuff. ”。它是一个文本节点( text node )。 在 XHTML文档里,文本节点总是被包含在元素节点的内部。但并非所有的元 素节点都包含有文本节点。 在“购物清单” 文档里, <ul> 元素没有直接包含任何 文本节点——它包含着其他的元素节点 (一些 <li> 元素),后者包含着文本节点。 3.属性节点 还存在着其他一些节点类型。例如,注释就是另外一种节点类型。但我们这 里还想向大家再多介绍一种节点类型。 元素都或多或少地有一些属性,属性的作用是对元素做出更具体的描述。例 如,几乎所有的元素都有一个 title 属性,而我们可以利用这个属性对包含在元 素里的东西做出准确的描述: 在 DOM中, title="a gentle reminder" 是一个属性节点( attribute node ), 如图 3-2 所示。因为属性总是被放在起始标签里, 所以属性节点总是被包含在元 素节点当中。 并非所有的元素都包含着属性,但所有的属性都会被包含在元素里。 图 3-2 一个元素节点,它包含着一个属性节点和一个文本节点 在前面的“购物清单”示例文档里,我们可以清楚地看到那个无序清单元素 (<ul> )有个 id 属性。如果曾经使用过 CSS,你们对 id 和 class 之类的属性应 该不会感到陌生。 不过,为了照顾那些对 CSS还不太熟悉的读者, 我们下面将简 要地重温几个最基本的 CSS概念。 4.CSS:层叠样式表 DOM并不是人们与网页的结构打交道的唯一手段。我们还可以通过 CSS(层 叠样式表)告诉浏览器应该如何显示一份文档的内容。 类似于 JavaScript 脚本,对样式的声明既可以嵌在文档的 <head>部分(这 需要用到 <style> 标签),也可以放在另外一个样式表文件里。利用 CSS对某个 元素的样式做出声明的语法与 JavaScript 函数的定义语法很相似: 在样式声明里, 我们可以对浏览器在显示各有关元素时使用的颜色、 字体和字号 做出定义,如下所示: 继承( inheritance )是 CSS技术中的一项强大功能。类似于 DOM,CSS也把 文档的内容视为一棵节点树。节点树上的各个元素将继承其父元素的样式属性。 例如,如果我们为 body 元素定义了一些颜色或字体,包含在 body 元素里的 所有元素都将自动获得——也就是继承,那些样式: 这些颜色将不仅作用于那些被直接包含在 <body>标签里的内容,还将作用于那些 嵌套在 body 元素内部的所有元素。 这里是把刚才定义的样式应用在“购物清单”示例文档上而得到的网页显示 效果。 在某些场合,当把样式应用于一份文档时,我们其实只想让那些样式只作用 于某个特定的元素。例如,我们只想让某一段文本变成某种特殊的颜色和字体, 但不想让其他段落受到影响。 为了获得如此精细的控制, 我们将需要在文档里插 入一些能够把这段文本与其他段落区别开来的特殊标志。 为了把某一个或某几个元素与其他元素区别开来,我们需要使用 class 属性 或 id 属性之一。 l class 属性 所有的元素都有 class 属性,不同的元素可以有同样的 class 属性值。如下 所示: 在样式表里,我们可以像下面这样为 class 属性值相同的所有元素定义一种共享 的样式: 我们还可以像下面这样利用 class 属性为一种特定类型的元素定义一种独享的 样式: l id 属性 id 属性的用途是给网页里的某个元素加上一个独一无二的标识符,如下所 示: 在样式表里,我们可以像下面这样为有着特定 id 属性值的元素定义一种独享的 样式: 每个元素只能有一个 id 属性值,不同的元素必须有不同的 id 属性值。不过,我 们可以在样式表里像下面这样,利用 id 属性为包含在某给定元素里的其他元素 定义样式,而如此定义出来的样式将只作用于包含在这个给定元素里的有关元 素: 这里是把刚才利用 id 属性定义的样式应用在“购物清单”示例文档上而得到的 网页显示效果。 id 属性就像是一个挂钩, 它一头连着文档里的某个元素, 另一头连着 CSS样 式表里的某个样式。 DOM也可以使用这种挂钩,事实上,有不少 DOM操作必须借 助于这种挂钩才能完成。 3.3.2 getElementById() 方法 DOM提供了一个名为 getElementById() 的方法,这个方法将返回一个与那个 有着给定 id 属性值的元素节点相对应的对象。请注意, JavaScript 语言区分字 母的大小写情况, 所以大家在写出 “getElementById ”时千万不要把大小写弄错 了。如果把它错写成“ GetElementById ”或“ getElementbyid ”,你将无法得到 你真正想要的东西。 这个方法是与 document对象相关联的函数 。在脚本代码里,函数名的后面 必须跟有一组圆括号, 这组圆括号包含着函数的参数。 getElementById() 方法只 有一个参数: 你想获得的那个元素的 id 属性值,这个 id 值必须放在单引号或双 引号里。 下面是一个例子: 这个调用将返回一个对象,这个对象对应着 document对象里的一个独一无二的 元素,那个元素的 HTML id 属性值是 purchases 。再说一遍, getElementById() 方法将返回一个对象。你们可以用 typeof 操作符来验证这一点。 typeof 操作符 可以告诉我们它的操作数是不是一个字符串、数值、函数、布尔值或对象 。 下面是把一些 JavaScript 语句插入到前面给出的“购物清单”文档之后得 到的一份代码清单,新增的代码(黑体字部分)出现在 </body>结束标签之前。 顺便说一句,我本人并不赞成把 JavaScript 代码直接嵌入一份文档的做法,但 它不失为一种简便快捷的测试手段: 把上面这些代码保存为一个 XHTML文件。当在你们的 Web浏览器里加载这个 XHT ML文件时,屏幕上将弹出一个如下所示的 alter 对话框,它向你们<span class="anchor-container"> <a class="hyperlink" href="https://office.iask.com/f/Rpm6TCrrRlv.html" target="_blank">报告</a> <span class="dropdown"><a class="hyperlink" href="https://office.iask.com/f/Rpm6TCrrRlv.html" target="_blank">软件系统测试报告下载</a><a class="hyperlink" href="https://office.iask.com/node/s/uNRSJ961z9A4.html" target="_blank">sgs报告如何下载</a><a class="hyperlink" href="https://office.iask.com/f/7DaemziDSwp.html" target="_blank">关于路面塌陷情况报告</a><a class="hyperlink" href="https://office.iask.com/node/s/uNRSJ961z9A4.html" target="_blank">535n,sgs报告怎么下载</a><a class="hyperlink" href="https://ishare.iask.com/f/16775806.html" target="_blank">竣工报告下载</a></span> </span> docume nt.getElementById ("purchases") 的类型——它是一个对象。不仅如此,如果 用上述办法去检查其他元素节点的类型,你们也会看到类似的 alert 对话框。 事实上,文档中的每一个元素都对应着一个对象。利用 DOM提供的方法,我 们可以把与这些元素相对应的任何一个对象筛选出来。 一般来说,我们用不着为文档里的每一个元素都分别定义一个独一无二的 i d 值;那也太小题大做了。要知道,即使某个元素没有独一无二的 id 值,我们 也可以利用 DOM提供的另一个方法把与之对应的对象准确无误地筛选出来。 3.3.3 getElementsByTagName() 方法 getElementsByTagName()方法将返回一个对象数组,每个对象分别对应着文 档里有着给定标签的一个元素。类似于 getElementById() ,这个方法也是只有 一个参数的函数,它的参数是 (X)HTML标签的名字: 它与 getElementById() 方法有许多相似之处,但有一点要特别提醒大家注意: g etElements- ByTagName() 方法返回的是一个数组;你们在编写脚本时千万注意 不要把这两个方法弄混了。 下面是一个例子: 这个调用将返回一个对象数组,每个对象分别对应着 document对象中的一个列 表项( li )元素。与任何其他的数组一样,我们可以利用 length 属性查出这个 数组里的元素个数。 首先,在上一小节给出的 XHTML示例文档里把 <script> 标签中的 alter 语句 替换为下面这条语句: 然后,用浏览器里重新加载那个 XHTML文件,你们就会看到这份示例文档里的列 表项元素的个数: 3。这个数组里的每个元素都是一个对象。可以通过利用一个 循环语句和 typeof 操作符去遍历这个数组的办法来验证这一点。例如,你们可 以试试下面这个 for 循环: 请注意,即使在整个文档里只有一个元素有着给定的标签名, getElementsByTa gName()方法也将返回一个数组。此时,那个数组的长度是 1。 你们或许早就觉得用键盘反复敲入 document.getElementsByTagName("li") 是件很麻烦的事情, 而这些长长的字符串会让代码变得越来越难以阅读。 有个简 单的办法可以减少不必要的打字量并改善代码的可读性: 只要把 document.getE lementsByTagName("li") 赋值给一个变量即可。 请在上一小节给出的 XHTML示例文档里把 <script> 标签中的 alter 语句替换 为下面这些语句: 现在,当用浏览器里重新加载那个 XHTML文件时,你们将看到三个 alert 对话框, 显示在这三个 alert 对话框里的消息都是“ object ”。 getElementsByTagName()方法允许我们把一个通配符当为它的参数,而这意 味着文档里的每个元素都将在这个函数所返回的数组里占有一席之地。通配符 (星号字符 “*”)必须放在引号里, 这是为了让通配符与乘法操作符有所区别。 如果你想知道某份文档里总共有多少个元素节点, 像下面这样以通配符为参数去 调用 getElementsByTagName()方法是最简便的办法: 我们还可以把 getElementById() 和 getElementsByTagName()方法结合起来 运用。例如 ,我们刚才给出的几个例子都是通过 document 对象调用 getElement sByTagName()方法的,如果只想知 道其 id 属性值是 purchase 的元素包含着多少 个列表项( li )的话,你就必须通过一个更具体的对象去调用这个方法, 如下所 示: 在这两条语句执行完毕后, items 数组将只包含其 id 属性值是 purchase 的 无序清单里的元素。具体到我们这个例子, items 数组的长度刚好与这份文档里 的列表项元素的总数相等: 如果还需要更多的证据,下面这些语句将证明 items 数组里的每个值确实是 一个对象: 3.4 趁热打铁 在看过那么多显示着单词“ object ”的 alert 对话框后,你们很可能不愿意 再看到它。如果真是如此, 我的目的也就达到了——我想通过这些 alert 对话框 强调这样一个事实: 文档中的每个元素节点都是一个对象。 我现在要告诉大家的 是,这些对象中的每个都为我们准备了一系列非常有用的方法, 而这一切当然都 要归功于 DOM。利用这些已经预先定义好的方法,我们不仅可以检索出关于文档 里的任何一个对象的信息,甚至还可以改变某些元素的属性。 下面是对本章此前学习内容的一个简要总结: ●一份文档就是一棵节点树。 ●节点分为不同的类型:元素节点、属性节点和文本节点等。 ● getElementById() 方法将返回一个对象,该对象对应着文档里的一个特定的元素节点。 ● getElementsByTagName() 方法将返回一个对象数组, 它们分别对应着文档里的一个特定 的元素节点。 ●这些节点中的每个都是一个对象。 接下来,我们将向大家介绍几个与这些对象相关联的属性和方法。 3.4.1 getAttribute() 方法 至此,我们已经向大家介绍了两种检索特定元素节点的办法:一种是使用 g etElementById() 方法,另一种是使用 getElementsByTagName()方法。在找到那 个元素后, 我们就可以利用 getAttribute() 方法把它的各种属性的值查询出来。 getAttribute() 方法是一个函数。它只有一个参数——你打算查询的属性的 名字: 不过, getAttribute() 方法不能通过 document对象调用,这与我们此前介绍过 的其他方法不同。我们只能通过一个元素节点对象调用它。 例如,你可以把它与 getElementsByTagName()方法结合起来,去查询每个 < p>元素的 title 属性,如下所示: 如果把上面这段代码插入到前面给出的“购物清单”示例文档的末尾,并在 Web 浏览器里重新加载这个页面,屏幕上将弹出一个显示着文本消息“ a gentle re minder”的 alter 对话框。 在“购物清单”文档里只有一个带有 title 属性的 <p>元素。假如这份文档 还有一个或更多个不带 title 属性的 <p>元素,则相应的 getAttribute("title") 调用将返回 null 。null 是 JavaScript 语言中的空值, 其含义是 “你说的这个东 西不存在” 。如果你们想亲自验证一下这件事, 请先把下面这段文本插入到 “购 物清单”文档中的现有文本段落之后: 然后重新加载这个页面。 这一次,你们将看到两个 alter 对话框,而第二个对话 框将是一片空白或者是只显示着单词“ null ”——具体情况要取决于你的 Web 浏览器将如何显示 null 值。 可以修改我们的脚本,让它只在 title 属性存在时才弹出一条消息。我们将 增加一条 if 语句来检查 getAttribute() 方法的返回值是不是 null 。趁着这个机 会,我们还增加了几个变量以提高脚本的可读性: 现在,如果重新加载这个页面,你们将只会看到一个显示着“ a gentle remind er ”消息的 alter 对话框,如下所示。 我们甚至可以把这段代码缩得更短一些。当检查某项数据是否是 null 值时, 我们其实是在检查它是否存在。 这种检查可以简化为直接把被检查的数据用做 i f 语句的条件。 if (something) 与 if (something != null) 完全等价, 但前者显 然更为简明。此时,如果 something 存在,则 if 语句的条件将为真;如果 some thing 不存在,则 if 语句的条件将为假。 具体到这个例子,只要我们把 if (title_text != null) 替换为 if (title_ text) ,我们就可以得到更简明的代码。此外,为了进一步增加代码的可读性, 我们还可以趁此机会把 alter 语句与 if 语句写在同一行上,这可以让它们更接 近于我们日常生活中的<span class="anchor-container"> <a class="hyperlink" href="https://office.iask.com/f/21rngCpBhnf.html" target="_blank">英语</a> <span class="dropdown"><a class="hyperlink" href="https://office.iask.com/f/21rngCpBhnf.html" target="_blank">关于好奇心的名言警句英语</a><a class="hyperlink" href="https://office.iask.com/node/s/qntt8xeNTM.html" target="_blank">高中英语词汇下载</a><a class="hyperlink" href="https://office.iask.com/node/s/qntt8xeNTM.html" target="_blank">高中英语词汇 下载</a><a class="hyperlink" href="https://office.iask.com/node/s/Dn7aKOn8Vj0h.html" target="_blank">英语衡水体下载</a><a class="hyperlink" href="https://office.iask.com/f/1WUYURcIQjz.html" target="_blank">小学英语关于形容词和副词的题</a></span> </span>句子: 3.4.2 setAttribute() 方法 我们此前介绍给大家的所有方法都只能用来检索信息。 setAttribute() 方法 与它们有一个本质上的区别:它允许我们对属性节点的值做出修改。 类似于 getAttribute() 方法,setAttribute() 方法也是一个只能通过元素节 点对象调用的函数,但 setAttribute() 方法需要我们向它传递两个参数: 在下面的例子里, 第一条语句将把 id 属性值是 purchase 的元素检索出来, 第二 条语句将把这个元素的 title 属性值设置为 a list of goods : 我们可以利用 getAttribute() 方法来证明这个元素的 title 属性值确实发生了 变化: 上面这些语句将在屏幕上弹出两个 alert 对话框:第一个 alter 对话框出现在 s etAttribute() 方法被调用之前,它将是一片空白或显示着单词“ null ”;第二 个出现在 title 属性值被设置之后,它将显示着“ a list of goods ”消息。 在上例中,我们设置了一个现有节点的 title 属性,但这个属性原先并不存 在。这意味着我们发出的 setAttribute() 调用实际完成了两项操作:先把这个 属性创建出来,然后再对其值进行设置。如果我们把 setAttribute() 方法用在 元素节点的某个现有属性上,这个属性的当前值将被覆盖。 在“购物清单”示例文档里, <p>元素已经有了一个 title 属性,这个属性 的值是 a gentle reminder 。我们可以用 setAttribute() 方法来改变它的当前 值: 上面这段代码将先从文档里把已经带有 title 属性的 <p>元素全部检索出来, 然后把它们的 title 属性值全部修改为 brand new title text 。具体到“购物 清单”文档,属性值 a gentle reminder 将被覆盖。 这里有一个非常值得关注的细节: 通过 setAttribute() 方法对文档做出的修 改,将使得文档在浏览器窗口里的显示效果和 / 或行为动作发生相应的变化,但 我们在通过浏览器的 view source (查看源代码)选项去查看文档的源代码时看 到的仍将是原来的属性值——也就是说, setAttribute() 方法做出的修改不会反 映在文档本身的源代码里。 这种“表里不一” 的现象源自 DOM的工作模式: 先加 载文档的静态内容、 再以动态方式对它们进行刷新, 动态刷新不影响文档的静态 内容。这正是 DOM的真正威力和诱人之处: 对页面内容的刷新不需要最终用户在 他们的浏览器里执行页面刷新操作就可以实现。 3.5 小结 在这一章里,我们向大家介绍了 DOM提供的四个方法: ● getElementById() 方法 ● getElementsByTagName() 方法 ● getAttribute() 方法 ● setAttribute() 方法 这四个方法是将要编写的许多 DOM脚本的基石。 DOM还提供了许多其他的属性和方法,如 nodeName、nodeValue、chileNode s、nextSibling 和 parentNode 等,但现在还不是它们出场的时候——我打算在 本书后面的有关章节中选择一些适当的时机把它们依次介绍给大家。 我在这里列 出它们的目的只是为了激起大家的学习兴趣。 本章内容比较偏重于理论。在看过那么多的 alter 对话框之后,相信大家都 迫不及待地想通过其他一些东西去进一步了解和测试 DOM,而我也正想通过一个 案例来进一步展示 DOM的强大威力。 在下一章中,我将带领大家利用本章介绍的四个 DOM方法去创建一个基于 J avaScript 的图片库。 第 4 章 案例研究: JavaScript 美术馆 现在,是时候利用 DOM去完成一些简单的任务了。在这一章中,我将带领大 家用 JavaScript 和 DOM去建立一个图片库, 并将其称为“JavaScript 美术馆”。 我们将按照以下步骤来完成这一案例: ●编写一份优秀的标记语言文档。 ●编写一个 JavaScript 函数以显示用户想要查看的图片。 ●在标记语言文档里触发一个调用 JavaScript 图片显示的函数。 ●对这个 JavaScript 函数的功能进行扩展。这需要用到几个新的 DOM 方法。 把一些图片发布到网上的办法很多。最容易想到的办法是把所有的图片都放 到同一个网页里。 不过,如果你打算发布的图片比较多的话, 这个页面很快就会 因为变得过于巨大而失去吸引力。要知道,虽然这种网页本身的 HTML代码不会 多到哪儿去, 但算上那些图片可就不一样了。 我们必须面对的现实是: 数据量越 大,网页的下载时间就越长, 但愿意等待很长时间去下载一个网页的人却没有几 个。 因此,为每张图片分别创建一个网页的解决<span class="anchor-container"> <a class="hyperlink" href="https://office.iask.com/f/sJ1vMu0fZUB.html" target="_blank">方案</a> <span class="dropdown"><a class="hyperlink" href="https://office.iask.com/f/sJ1vMu0fZUB.html" target="_blank">气瓶 现场处置方案 .pdf</a><a class="hyperlink" href="https://office.iask.com/f/sJ1vMu0fZUB.html" target="_blank">气瓶 现场处置方案 .doc</a><a class="hyperlink" href="https://office.iask.com/f/2WXUWhTiiJ3.html" target="_blank">见习基地管理方案.doc</a><a class="hyperlink" href="https://office.iask.com/f/2gKr7v23OCV.html" target="_blank">关于群访事件的化解方案</a><a class="hyperlink" href="https://office.iask.com/f/282PhCXFWzX.html" target="_blank">建筑工地扬尘治理专项方案下载</a></span> </span>显然更值得考虑。你的图片 库将不再是一个体积庞大、 难以下载的网页, 而是许多尺寸合理、 便于下载和浏 览的页面。 不过,这一解决方案并非尽善尽美: 首先,为每张图片分别制作一个 网页需要花费不少的时间和精力; 其次,需要在每个网页上提供一些链接, 来给 出当前图片在整个图片库里的位置以方便人们从当前图片转到其他的图片。 如果你想两全其美,利用 JavaScript 来创建图片库将是最佳的选择:把整 个图片库的浏览链接集中安排在你的图片库主页里, 只在用户点击了这个主页里 的某个图片链接时才把相应的图片传送给他。 4.1 编写标记语言文档 为了完成“ JavaScript 美术馆”案例,我特意用数码相机拍摄了几张照片, 并把它们修整成最适合于用浏览器来查看的尺寸,即 400 像素宽× 300 像素高。 第一项工作是为这些图片创建一个链接清单。因为我没打算让这些图片按照 某种特殊的顺序排列,所以将使用一个无序清单元素( <ul> )来列出那些链接。 如果想让自己的图片按顺序排列的话, 应该使用一个排序清单元素 (<ol> )去组 织图片链接。 下面就是我编写出来的 HTML文档: 我将把这份文档保存为 gallery.html 文件,并把图片集中保存在子目录 im ages 里。我的 images 子目录和 gallery.html 文件位于同一个子目录下。在 ga llery.html 文件里,无序清单元素中的每个链接分别指向不同的图片。在浏览 器窗口里点击某个链接就可以转到相应的图片, 但从图片重新返回到链接清单目 前还必须借助于浏览器的 Back(后退)按钮。下面是这个基本的链接清单在浏 览器窗口里的显示效果。 这是一个相当令人满意的网页,但它的默认行为还不太理想。下面是我觉得 还需要改进的几个地方: ●当点击某个链接时,我希望能留在这个网页而不是转到另一个窗口。 ●当点击某个链接时,我希望能在这个网页上同时看到那张图片以及原有的图片清单。 下面是我为了实现上述希望而需要完成的几项改进: ●通过增加一个 “占位符 ”图片的办法在这个主页上为图片预留一个浏览区域。 ●在点击某个链接时,将拦截这个网页的默认行为。 ●在点击某个链接时,将把 “占位符 ”图片替换为与那个链接相对应的图片。 我们先来解决“占位符”图片的问题。我选用了一个类似于名片的图片,你 们可以根据个人喜好来决定选用的图片,即使选用一个空白图片也没问题。 把下面这些代码插入到图片名单的末尾: 我对这个图片的 id 属性进行了设置,这将使我可以通过一个外部的样式表 对图片的显示位置和显示效果加以控制。 例如,我可以让这个图片出现在链接清 单的旁边而不是它的下方。我还可以在自己的 JavaScript 代码里使用这个 id 值。下面是这个页面在增加了“占位符”图片后的显示效果。 现在,我的 HTML文档已经准备好了。接下来的工作是编写一些必要的 Java Script 代码。 4.2 编写 JavaScript 函数 为了把“占位符”图片替换为想要查看的图片,需要改变它的 src 属性。 se tAttribute() 方法是完成这项工作的最佳选择,而我将利用这个方法写一个函 数。那个函数只有一个参数, 即我想查看的那张图片的链接; 它将通过改变 “占 位符”图片的 src 属性的办法将其替换为我想查看的那张图片。 首先,需要给函数起一个好的名字。我想让它既能提醒我这个函数的用途, 又足够简明扼要。我决定把这个函数命名为 showPic() 。还需要给这个函数的参 数起一个名字,我决定把它命名为 whichpic : whichpic 代表着一个元素节点; 具体地说,那将是一个指向某个图片的 <a>元素。 我需要知道那个图片的文件路径, 这个路径可以通过在 whichpic 元素上调用 ge tAttribute() 方法的办法查出来——只要把 "href" 作为参数传递给 getAttribu te() 方法,就可以知道那个图片的文件路径了: 我将把这个路径存入一个变量以便在后面的语句里使用它。 我决定把这个变量命 名为 source : 接下来,还需要把“占位符”图片检索出来,这种事对 getElementById() 方法 来说不过是小菜一碟: 我不想重复敲入“ document. getElementById("placerholder") ”这么长的 字符串,所以将把这个元素赋值给一个变量并将其命名为 placerholder : 现在,已经声明并赋值了两个变量: source 和 placerholder 。它们可以让我的 脚本简明易读。 我将使用 setAttribute() 方法对 placerholder 元素的 src 属性进行刷新。 还记得吗, 这个方法有两个参数: 一个是打算对之进行设置的属性, 另一个是这 个属性的新属性值。 具体到这个例子, 因为我想对 src 属性进行设置, 所以第一 个参数是 "src" ;至于第二个参数,也就是 src 属性的新属性值,我已经把它保 存在 source 变量里了: 这显然要比下面这么冗长的代码更容易阅读和理解: 4.2.1 DOM 之前的解决方案 其实,不使用 setAttribute() 方法也可以改变某个图片的 src 属性。 setAttribute() 方法是“第 1 级 DOM”(DOM Level 1)的组成部分之一,这 个方法可以对任意元素节点的任意属性进行设置。在“第 1 级 DOM”出现之前, 程序员只能通过另外一种办法对一部分元素的属性进行设置, 这个办法至少在目 前还可以用来改变某些属性的值。 例如,如果想改变某个输入元素的 value 属性,可以使用如下所示的办法: 这与下面这条语句的效果是等价的: 类似的办法也可以用来改变图片的 src 属性。例如,在我的图片库脚本里, 完全 可以用下面这条语句来代替 setAttribute() 调用: 我个人更喜欢使用 setAttribute() 方法。这起码可以让我不必费心去记忆哪些 元素的哪些属性可以用哪些 DOM之前的方法去设置。 虽然用那些老办法可以毫无 问题地对文档里的图片、表单和其他一些元素的属性进行设置,但 setAttribut e() 方法的优势在于它可以对文档中的任何一个元素的任何一个属性做出修改。 “第 1 级 DOM”的另一个优势是可移植性更好。那些老方法只适用于 Web文 档, DOM则适用于任何一种标记语言。虽然这种差异对我们这个例子没有影响, 但我希望大家能够牢牢记住这一点: DOM是一种适用于多种环境和多种程序设计 语言的通用型 API。如果想把从本书学到的 DOM技巧运用在 Web浏览器以外的应 用环境里,严格遵守“第 1 级 DOM”能够让你们避免与兼容性有关的任何问题。 4.2.2 showPic() 函数的代码清单 下面是 showPic() 函数完整的代码清单: 接下来的任务是把这个 JavaScript 函数与我们的 HTML文档结合起来。 4.3 JavaScript 函数的调用 我需要把刚编写出来 showPic() 函数与图片库 HTML文档结合起来。 最简单的 办法是把这个函数用一组 <script> 标签插入到那个文档的 <head>部分,但我认为 这种做法有点儿目光短浅: 如果今后想把这同一函数用在多个页面上的话, 我将 不得不反复多次地进行剪贴操作。 为今后考虑, 更有远见的办法是先把这个函数 存入一个外部文件,然后在每一份需要用到这个函数的 HTML文档的 <head>部分 插入一个链接来引用这个外部文件。 以.js 作为文件扩展名,把这个函数存入一个文本文件。完全可以把这种文 件命名为你们喜欢的任何东西, 但我习惯于用这些文件所包含的函数的名字来命 名它们——我给这个文件起的名字是 showPic.js 。 就像我刚才决定把所有的图片集中存放在 images 子目录里那样,把所有的 J avaScript 脚本文件集中存放在一个子目录里也将是个好主意。 我创建了一个名 为 scripts 的子目录并把 showPic.js 文件保存到其中。 现在,需要在图片库 HTML文档里插入一个链接来引用这个 JavaScript 脚本 文件。我将把下面这条语句插入那份 HTML文档的 <head>部分(选择的插入位置 是<head>标签之后): 有了这条语句,把 showPic() 函数与图片库 HTML文档结合起来的任务就已经完 成了一半——我还需要为 HTML文档里的每个图片链接增加一个函数调用动作, 否则 showPic() 函数将永远也不会被调用。我将通过增加一个事件处理函数( ev ent handler )的办法来完成这项工作。 事件处理函数 事件处理函数的作用是,在预定事件发生时让预先安排好的 JavaScript 代 码开始执行,用术语来说就是 “触发一个动作”。例如,如果想在鼠标指针悬 停在某个元素上时触发一个动作, 就需要使用 onmouseover事件处理函数; 如果 想在鼠标指针离开某个元素时触发一个动作,就需要使用 onmouseout事件处理 函数。在“ JavaScript 美术馆”案例里,我想在用户点击某个链接时触发一个 动作,所以需要使用 onclick 事件处理函数。 我想通过 onclick 事件处理函数去触发的动作是调用 showPic() 函数,而要 想调用这个函数,就必须向它传递一个参数:一个带有 href 属性的元素节点。 在图片库 HTML文档里,当我把 onclick 事件处理函数嵌入一些链接时,我需要 把那些链接本身用作 showPic() 函数的参数。 有个非常简单但又非常有效的办法可以做到这一点:使用 JavaScript 语言 中的 this 关键字 。这个关键字的含义是“这个对象”。具体到正在讨论的这个 例子,我将使用 this 来表示“这个 <a>元素节点”: 综上所述, 我将使用 onclick 事件处理函数去调用 showPic(this) 方法。使用事 件处理函数调用 JavaScript 代码的语法如下所示: 请注意,在如上所示的语法里, JavaScript 代码是包含在一对引号之间的:我 们可以把任意数量的 JavaScript 语句放在这对引号之间,只要把各条语句用分 号隔开即可。 下面这条语句将完成 “使用 onclick 事件处理函数调用 showPic(this) 方法” 的任务: 不过,如果只把上面这个事件处理函数插入到 HTML文档中的链接里去的话,将 遇到这样一个问题: 在 onclick 事件发生时,不仅 showPic(this) 函数将被调用, 链接被点击时的默认行为也将发生。 这意味着用户还是会被带到另外一个图片查 看窗口里去,而这是我不希望发生的事情。我需要阻止这种默认行为的发生。 要想达到这一目的,我们必须对事件处理函数的工作机制有进一步的了解: 在给某个元素添加了事件处理函数后,一旦发生预定事件,相应的 JavaScript 代码就会得到执行;那些 JavaScript 代码可以返回一个结果,而这个结果将被 传递回那个事件处理函数。 例如,我们可以给某个链接添加一个 onclick 事件处 理函数,并让这个处理函数所触发的 JavaScript 代码返回布尔值 true 或 false 。 这样一来,当这个链接被点击时,如果那段 JavaScript 代码返回给 onclick 事 件处理函数的值是 true ,onclick 事件处理函数将认为“这个链接被点击了”; 反之,如果那段 JavaScript 代码返回给 onclick 事件处理函数的值是 false ,o nclick 事件处理函数将认为“这个链接没有被点击”。 可以通过下面这个简单测试去验证这一结论: 当点击这个链接时,因为 onclick 事件处理函数所触发的 JavaScript 代码返回 给它的值是 false ,所以这个链接在被点击时的默认行为将不会发生。 同样道理,如果像下面这样在 onclick 事件处理函数所触发的 JavaScript 代码里增加一条 return false 语句的话,我就可以不让用户被他们所点击的链 接带到另外一个图片查看窗口里去: 下面是最终完成的 onclick 事件处理函数在图片库 HTML文档里的样子: 接下来,只要在图片库 HTML文档里把这个 onclick 事件处理函数添加到每 个链接上即可。 这当然有些麻烦, 但眼下只能这么做——我将在后面的内容里向 大家介绍一个可以避免这种麻烦的办法。下面是图片库 HTML文档在我以手动方 式把这个 onclick 事件处理函数添加到各个有关链接上之后的样子: 现在,如果把这个页面加载到 Web浏览器里,你们将看到一个能够正常工作的 “J avaScript 美术馆”:在如下所示的页面里,不管在图片列表里的哪个链接上点 击鼠标,都将在这同一个页面里看到相应的图片。 4.4 对 JavaScript 函数进行功能扩展 在同一个网页上切换显示不同的图片并不是什么新鲜事。有着这类效果的网 页和脚本早在 W3C推出它们的标准化 DOM和 JavaScript 语言之前就已经出现了, 如今更是得到了广泛的流行。 在这种情形下,如果你们想让自己与众不同,就必须另辟蹊径——你们有没 有想过在同一个网页上切换显示不同的文本?我可不是在开玩笑, 利用 JavaScr ipt 语言和 DOM,确实可以做到这一点。 图片库 HTML文档里的每个图片链接都有一个 title 属性。我想把这个属性 的值提取出来并让它们伴随相应的图片一同显示在网页上。 title 属性的值可以 用 getAttribute() 方法轻而易举地提取出来,如果把下面这条语句添加到 show Pic() 函数的开头的话,就可以把 title 属性的值保存到一个变量里: 解决了提取 title 属性值的问题,还需要把它插入到 HTML文档中的适当位置。 为了完成这一工作,我需要用到几个新的 DOM属性。 4.4.1 childNodes 属性 childNodes 属性让我们可以从给定文档的节点树里把任何一个元素的所有 子元素检索出来。 childNodes 属性将返回一个数组,这个数组包含给定元素节点的全体子元 素: 假设我们需要把某个文档的 body 元素的全体子元素检索出来。首先,我们将使 用 getElementsByTagName()方法来得到 body 元素。因为每份文档只有一个 bod y 元素,所以它将是 getElementsByTagName("body") 方法所返回的数组中的第一 个(也是唯一一个)元素: 现在,变量 body_element 已经指向了那个文档的 body 元素。接下来, 可以用如 下所示的语法记号把 body 元素的全体子元素检索出来: 写出这个记号显然要比敲入下面这个长长的字符串要简明得多: 顺便说一句, body 元素还有一个更简单的专用记号: 现在,已经知道如何把 body 元素的全体子元素检索出来了,我们来看看这些信 息的用途。 首先,我们可以精确地查出 body 元素有多少个子元素。因为 childNodes 属 性返回的是一个数组,所以可以用数组数据类型的 length 属性查出它所包含的 元素的个数: 请把下面这个小函数添加到 showPic.js 文件里: 这个简单的小函数将弹出一个 alert 对话框,其显示内容是 body 元素的子元素 的总数。 我想让这个函数在页面加载时执行,而这需要使用 onload 事件处理函数。 把下面这条语句添加到代码段的末尾: 这条语句将在页面加载时调用 countBodyChildren 函数。 在 Web浏览器里刷新 gallery.html 文件。你们将看到一个 alert 对话框, 其显示内容是 body 元素的子元素的总数。那个数字很可能会让你们大吃一惊。 4.4.2 nodeType 属性 根据 gallery.html 文件的结构, body 元素应该只有 3 个子元素: 一个 h1 元 素、一个 ul 元素和一个 imag 元素。可是, countBodyChildren() 函数给出来的 数字却远大于此。 之所以会这样, 是因为文档树的节点类型并非只有元素节点一 种。 由 childNodes 属性返回的数组包含着所有类型的节点,除了所有的元素节 点,所有的属性节点和文本节点也包含在其中。 事实上,文档里几乎每一样东西 都是一个节点——甚至连空格和换行符都会被解释为节点, 而它们也全都包含在 childNodes 属性所返回的数组当中。 因此, countBodyChildren() 函数的返回结果才会是一个相当大的数字。 还好,我们可以利用 nodeType属性来区分文档里的各个节点。这个属性可 以让我们知道自己正在与哪一种节点打交道。 不过,这个属性返回的是一个数字 而不是像“ element ”或“ attribute ”那样的英文字符串。 下面是 nodeType属性的调用语法: 为了验证这一点, 请把 countBodyChildren() 函数中的 alter 语句替换为下面这 条语句,这样一来,我们就可以知道 body_element 元素的 nodeType属性了: 在 Web浏览器里刷新 gallery.html 文件,将看到一个显示数字“ 1”的 alert 对话框。换句话说,元素节点的 nodeType 属性值是 1。 nodeType属性总共有 12 种可取值,但其中仅有 3 种具有实用价值:元素节 点、属性节点和文本节点的 nodeType 属性值分别是 1、2 和 3。 ●元素节点的 nodeType 属性值是 1。 ●属性节点的 nodeType 属性值是 2。 ●文本节点的 nodeType 属性值是 3。 这个意味着,可以让我们的函数只对某种特定类型的节点进行处理。例如, 完全可以编写出一个只对元素节点进行处理的函数。 4.4.3 在 HTML 文档里增加一段描述性文本 为了让我的 “JavaScript 美术馆”变得与众不同, 我决定给它增加一个文本 节点。我想在显示图片时把这个文本节点的值替换为一个来自某个属性节点 (某 个图片链接的 title 属性)的值。 首先,需要为打算显示的文本安排显示位置。我将在 gallery.html 文件里 增加一个新的文本段。我决定把它安排在 <img>标签之前。我将为它设置一个独 一无二的 id 值,这样就能在 JavaScript 函数里方便地引用它了: 上面这条语句将把 <p>元素的 id 属性设置为 description (描述),这个单词可 以让这个元素的用途一目了然。如下所示,包含在此元素里的文本现在是“ Cho ose an image. ”,但我打算在切换显示图片时把这段文本同时替换为相应的描 述性文字。 我想达到的预期效果是: 在“JavaScript 美术馆”里的某个图片链接被点击 时,不仅要把“占位符”图片替换为那个链接的 href 属性所指向的图片,还要 把这段文本同时替换为那个链接的 title 属性值。为了实现这一想法,需要对 s howPic() 函数做一些改进。 4.4.4 用 JavaScript 代码改变 <p> 元素的文本内容 为了把“JavaScript 美术馆”里的图片说明在某个图片链接被点击时, 动态 地替换为那个链接的 title 属性值,我需要对 showPic() 函数做一些修改。 下面是 showPic() 函数现在的样子: 首先,我需要在 showPic() 函数里增加一些语句来提取 whichpic 对象的 title 属性值。我将把提取到的 title 属性值存入 text 变量。这些事可以轻而易举地 利用 getAttribute() 方法完成: 接下来,为了让自己能在代码里方便地引用那段 id 属性值等于 descriptio n 的文本,我决定创建一个新的变量来存放它: 下面是 showPic() 函数在我给它增加了上述两个变量之后的样子: 我们的下一个任务是实现文本的切换显示效果。 4.4.5 nodeValue 属性 如果想改变某个文本节点的值,那就使用 DOM提供的 nodeValue 属性,它的 用途正是检索(和设置)节点的值: 但这里有个大家必须注意的细节 :在用 nodeValue 属性检索 description 对象的 值时,你得到的并不是包含在这个段落里的文本。 可以用下面这条 alert 语句来 验证这一点: 这个调用将返回一个 null 值。<p>元素的 nodeValue 属性值是一个空值, 而我们 这里需要的是 <p>元素所包含的文本的值。 包含在 <p>元素里的文本是另一种节点,它在 DOM里是 <p>元素的第一个子节 点。换句话说,如果想获得 <p>元素的文本内容,就必须检索它的第一个子节点 的 nodeValue 属性值。 下面这条 alert 语句可以找到我们想要的内容: 这个调用的返回值才是我们正在寻找的“ Choose an image. ”。这个值来自 chi ldNodes[] 数组的第一个(下标是 0)元素。 4.4.6 firstChild 和 lastChild 属性 数组元素 childNodes[0] 有个更直观易读的同义词。无论何时何地,只要需 要访问 childNodes[] 数组的第一个元素,我们都可以把它写成 firstChild ,这 个记号本身是一个属性: 这种用法与下面这个语法记号完全等价: 单词“ firstChild ”不仅更加简短,还更加具有可读性。 DOM还提供了一个与之对应的 lastChild 属性: 这个语法记号代表着 childNodes[] 数组的最后一个元素。如果不想通过 lastCh ild 属性去访问这个节点,我们将不得不使用如下所示的语法记号: 与简明易懂的 lastChild 相比,这么复杂的语法记号恐怕没人会喜欢。 4.4.7 利用 nodeValue 属性刷新 <p> 元素的文本内容 现在,我们将回到 showPic() 函数。我将对 id 属性值等于 description 的< p>元素所包含的文本节点的 nodeValue 属性进行刷新。 具体到这个 id 属性值等于 description 的 <p>元素,因为它只有一个子节点, 所以选用 firstChild 属性或是选用 lastChild 属性的效果是完全一样的。既然 如此,我决定选用 firstChild 属性。 我可以把 4.4.5 节里的 alter 语句改写为如下所示的样子: 两条语句的效果完全一样(都将显示“ Choose an image. ”消息),但这里的代 码显然更容易阅读和理解。 nodeValue 属性的用途并非仅限于此。我们不仅可以用它来检索某个节点的 值,还可以用它来设置某个节点的值;后一种用法正是我目前最需要的。 还记得刚才在 showPic() 函数里的 text 变量吗?当“ JavaScript 美术馆” 页面上的某个图片链接被点击时, showPic() 函数会把这个链接的 title 属性值 传递给 text 变量。而我现在将用 text 变量去刷新 id 值等于 description 的那 个<p>元素的第一个子节点的 nodeValue 属性值,如下所示: 下面是我为了改进 showPic() 函数而给它添加的三条新语句: 如果用日常生活中的语言来说,这三条语句的含义依次是: ●当“ JavaScript美术馆 ”页面上的某个图片链接被点击时, 这个链接的 title 属性值将被提取 并保存到 text 变量中。 ●找到那个 id="description" 的<p> 元素,并把这个对象保存到变量 description 里去。 ●把 description 对象的第一个子节点的 nodeValue 属性值设置为变量 text 的值。 下面是完成上述改进后的 showPic() 函数的代码清单: 如果想测试一下这些扩展功能,请把改进后的 showPic() 函数存入 showPic.js 文件,然后在浏览器里刷新 gallery.html 文档。现在,点击这个网页上的某个 图片链接时, 你们将看到两种效果: “占位符” 图片将被替换为这个链接所指向 的一张新图片,同时图片下方的描述性文字也将被替换为这个链接的 title 属性 值,如下所示。 你们可以在 http://friendsofed.com/ 网站上找到“ JavaScript 美术馆”脚 本文件和 HTML文档。我在示例中用到的图片也可以在那里找到,但我建议大家 找一些自己的图片来测试这个脚本,那样会更有意思。 如果想让这个 “JavaScript 美术馆”变得更美观, 可以再给它增加一个像下 面这样的样式表: 请把这些 CSS代码存入 layout.css 文件,并把这个文件存放到 styles 子目录里。 然后,就可以在 gallery.html 文档的 <head>部分用一个 <link> 标签来引用这个 文件了,如下所示: 下面是“JavaScript 美术馆”在经过上面那个简单的样式表修饰之后的显示 效果。 4.5 小结 本章向大家介绍了一个简单的 JavaScript 应用案例。在实现这个案例的过 程中,我们还向大家介绍了 DOM提供的几个新属性,它们是: ● childNodes ● nodeType ● nodeValue ● firstChild ● lastChild 本章的学习重点有两个: 一是如何利用 DOM所提供的方法去编写图片库脚本; 二是如何利用事件处理函数把 JavaScript 代码与网页集成在一起。 从表面上看,我们的“ JavaScript 美术馆”已经大获成功,但它实际上还有 许多地方值得改进,而那将是随后两章里的讨论重点。 在下一章中,我将向大家介绍一些 JavaScript 脚本编程方面的原则和良好 习惯,我希望它们能让你们领悟这样一个道理: 通往终点的过程与终点本身同样 重要。 在那之后,我将向你们演示如何把那些编程原则和良好习惯应用到“ JavaSc ript 美术馆”案例上。 </div> </div> <!-- 正文底部文案 --> <div class="file-content-bottom mt20"> 本文档为【Javascript_DOM编程艺术翻译版】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。 <br> 该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。<br> [版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。<br> 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。<br> 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。 </div> <!-- 下载 --> <div class="download-area mt20"> <div class="down-info"> <!-- VIP专享资料展示xx特权,付费资料展示¥xx,免费资料展示免费。 --> 下载需要: 免费 已有0 人下载 </div> <div class="download-groupbtns"> <a href="javascript:;">立即下载</a> </div> </div> <!-- 你可能还喜欢 --> <div class="youlike-area mt20"> <h3>你可能还喜欢</h3> <ul class="youlike-item"> <li> <a href="https://ishare.iask.com/f/avbkQ1oBiIu.html">浙江大学2004年硕士研究生按专业报考录取情况统计</a> </li> <li> <a href="https://ishare.iask.com/f/2uXurFzT3t.html">电力节能降耗技术措施分析</a> </li> <li> <a href="https://ishare.iask.com/f/32t95EngKOn.html">从扭捏登场到泛裸体时代</a> </li> <li> <a href="https://ishare.iask.com/f/33X2LW1h2b4.html">钣金件螺丝抽孔的设计标准</a> </li> <li> <a href="https://ishare.iask.com/f/34VTaUW2Sk4.html">网线双胶的意义</a> </li> <li> <a href="https://ishare.iask.com/f/35472759.html">磁共振弥散张量成像的原理、参数及影响因素</a> </li> <li> <a href="https://ishare.iask.com/f/35vfULcySKE.html">激素依赖性皮炎诊治指南解读</a> </li> <li> <a href="https://ishare.iask.com/f/d6e625vJLdhE.html">2023年云南省地区融资专员职位薪酬调查报告</a> </li> <li> <a href="https://ishare.iask.com/f/1fgLtFQlE2Ef.html">四年级脱式计算题500道</a> </li> <li> <a href="https://ishare.iask.com/f/31AFY8wQ3rB.html">超级麦霸私教课唱响KTV 如果你天生胆小、性格内向,为了超</a> </li> <li> <a href="https://ishare.iask.com/f/32X2CBFQWR.html">深交所 中小板上市公司中报预约披露</a> </li> <li> <a href="https://ishare.iask.com/f/33xIct8Xwa3.html">【最新精选】宋祁《玉楼春》东城渐觉春光好</a> </li> <li> <a href="https://ishare.iask.com/f/5IDdxTUNnPl.html">眼保健操穴位图</a> </li> <li> <a href="https://ishare.iask.com/f/bypsjZdalU1.html">精麻药品使用流向明细表</a> </li> <li> <a href="https://ishare.iask.com/f/cVbzfz34MZ.html">原发性肝癌试题</a> </li> <li> <a href="https://ishare.iask.com/f/tGZyBxITiB.html">售后服务及质量保证承诺书</a> </li> <li> <a href="https://m.ishare.iask.com/node/s/9fk6elwgpzv2q.html">电器维修表格</a> </li> <li> <a href="https://m.ishare.iask.com/node/s/9fk6elwgpzv2q.html">电器维修表格</a> </li> <li> <a href="https://m.ishare.iask.com/node/s/9fk6elwgpzv2q.html">电器维修表格</a> </li> <li> <a href="https://m.ishare.iask.com/node/s/9fk6elwgpzv2q.html">电器维修表格</a> </li> </ul> </div> <!-- 推荐 --> <div class="recmond-area mt20"> <div class="recmend-tab"> <div class="tab-item" val="new">最新资料</div> <div class="tab-item current" val="hot">资料动态</div> <div class="tab-item" val="topic">专题动态</div> </div> <div class="recmend-item"> <div class="switch_content_wrap"> <ul> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/iILEkHrWER.html" target="_blank">《法律基础与实务》期末试题及答案(2012)</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/61823918.html" target="_blank">GBT 24525-2009 炭素材料电阻率测定方法</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/6wli9nEkxfY.html" target="_blank">液压与气压传动技术ppt课件(完整版)</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/8BbT9UIUpeM.html" target="_blank">【苏教版】2018年秋小学数学五年级上册全套课时作业含答案</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/QqTGGyLSd7.html" target="_blank">户外广告传播效果的评估指标</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/atDYMD3ImG.html" target="_blank">平均每批有多少人_三位数除以一位数</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/7aXgQuEOj.html" target="_blank">四年级下学期开学第一课主题班会ppt</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/Au5OTIajJN.html" target="_blank">图解汽车底盘构造</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/bVbZqmvWF9.html" target="_blank">缺铁性贫血讲座ppt课件</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/brBRAy3NwE7.html" target="_blank">呼吸科重点专科汇报PPT课件</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/buSInEscEYR.html" target="_blank">《工厂供配电技术》 课程标准 电气</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/bulGshEu4sz.html" target="_blank">2018-2019学年九年级化学下册第六章金属6.3金属矿物与冶炼同步练习课件新粤教版</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/d4LrZbSlwO.html" target="_blank">最新教师进城考试试题库</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/6xPRFtN5qjd.html" target="_blank">四年级美术下册《电脑美术——你追我赶》教案</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/iILEkHrWER.html" target="_blank">《法律基础与实务》期末试题及答案(2012)</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/61823918.html" target="_blank">GBT 24525-2009 炭素材料电阻率测定方法</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/6wli9nEkxfY.html" target="_blank">液压与气压传动技术ppt课件(完整版)</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/8BbT9UIUpeM.html" target="_blank">【苏教版】2018年秋小学数学五年级上册全套课时作业含答案</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/QqTGGyLSd7.html" target="_blank">户外广告传播效果的评估指标</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/atDYMD3ImG.html" target="_blank">平均每批有多少人_三位数除以一位数</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/7aXgQuEOj.html" target="_blank">四年级下学期开学第一课主题班会ppt</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/Au5OTIajJN.html" target="_blank">图解汽车底盘构造</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/bVbZqmvWF9.html" target="_blank">缺铁性贫血讲座ppt课件</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/brBRAy3NwE7.html" target="_blank">呼吸科重点专科汇报PPT课件</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/buSInEscEYR.html" target="_blank">《工厂供配电技术》 课程标准 电气</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/bulGshEu4sz.html" target="_blank">2018-2019学年九年级化学下册第六章金属6.3金属矿物与冶炼同步练习课件新粤教版</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/d4LrZbSlwO.html" target="_blank">最新教师进城考试试题库</a> </li> <li> <!-- <a target="_blank" href="https://ishare.iask.sina.com.cn/f/.html"></a> --> <a href="https://ishare.iask.com/f/6xPRFtN5qjd.html" target="_blank">四年级美术下册《电脑美术——你追我赶》教案</a> </li> </ul> </div> <div class="switch_content_wrap current"> <ul> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/3qy6GQJm4b.html" target="_blank">那年青春作文</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/4gvNGkVA5FA.html" target="_blank">初一下数学解方程组练习题</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/4hoGMWXojZ.html" target="_blank">区域地理(北美洲)部分</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/5g7kNbjk25i.html" target="_blank">《明天会更好》歌词</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/6O2DV9WMjJ.html" target="_blank">中考复习:句子仿写专项训练(84页)</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/6uYZzor3pkp.html" target="_blank">建筑工程公司人力资源管理制度汇编(全套)</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/7IbHK5SMg1L.html" target="_blank">莱温斯基:耻辱的代价</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/R1JBJayILBx.html" target="_blank">人教版小学五年级数学册《不规则物体体积的计算》练习题及答案</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/318c0fzfKqa.html" target="_blank">中国废旧物资网说辞精简版</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/33utpBmElLG.html" target="_blank">南京有线宽带数据接入的用户管理</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/5btTQ2agQj.html" target="_blank">都是贪玩惹的祸450字作文</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/1Kr6fjHOz5a.html" target="_blank">excel操作试题库完整</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/bmfLsctaZKh7.html" target="_blank">悲惨的一天_初二议论文作文800字</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/bpj3wMUgLV.html" target="_blank">六年级上册英语工作总结</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/fnSWsOjrD5.html" target="_blank">妈妈谢谢你作文</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/iHg4EkYZtp.html" target="_blank">2012中考专题 人教版16篇课内文言文复习过关测试hhhhhhhh</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/iL4x5SvoID.html" target="_blank">吉尼斯世界纪录大全(2005年版)</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://ishare.iask.com/f/1H062MSp9H8A.html" target="_blank">校长年度考核个人总结</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://ishare.iask.com/f/1H5ktFxXb4cI.html" target="_blank">自考报名技巧和注意事项整理大全成人自考怎么报名</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://ishare.iask.com/f/1kxNUm11Kqt.html" target="_blank">英语七年级上册第四单元ppt课件</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://ishare.iask.com/f/2ZpGcFTgIr1.html" target="_blank">耐克PPT</a> </li> </ul> </div> <div class="switch_content_wrap"> <ul> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/iNEtKV7QjH.html" target="_blank">《电子系统设计与实践》考试试题</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/bsijb8SGnoD.html" target="_blank">青岛市种牛场扩建项目可行性研究报告</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/1jj0ewEhsN.html" target="_blank">电磁场与电磁波-第三章-恒定电流场PPT课件</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/27BNIkOjsIC.html" target="_blank">少先队工作总结(最新)</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/2RRJmihwXwC.html" target="_blank">【信息技术2.0】A1技术支持的学情分析 高中语文《雷雨》学情分析方案</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/33eZDmwZyuG.html" target="_blank">钢筋机械安装验收表</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/12Mzyri5Iht5.html" target="_blank">巴蜀初一语文期末考试试题</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/1eJkqyEL6sKj.html" target="_blank">锦园生态养老中心简介</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/by0Sz7BfKLl.html" target="_blank">魏家凉皮报酬分析毕业论文</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/cG9phVWKRn.html" target="_blank">江苏省食品经营许可审查细则试行</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/dJB1Wcwtvn.html" target="_blank">岩体力学实验报告、指导书</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/iEbnMbb3Gq.html" target="_blank">致宾客的一封信</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/iVOtRk6JJV.html" target="_blank">定陶一中[最新]</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/tFqcjQqEbK9.html" target="_blank">动火分析数据对照表</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/iNEtKV7QjH.html" target="_blank">《电子系统设计与实践》考试试题</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/bsijb8SGnoD.html" target="_blank">青岛市种牛场扩建项目可行性研究报告</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/1jj0ewEhsN.html" target="_blank">电磁场与电磁波-第三章-恒定电流场PPT课件</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/27BNIkOjsIC.html" target="_blank">少先队工作总结(最新)</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/2RRJmihwXwC.html" target="_blank">【信息技术2.0】A1技术支持的学情分析 高中语文《雷雨》学情分析方案</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/33eZDmwZyuG.html" target="_blank">钢筋机械安装验收表</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/12Mzyri5Iht5.html" target="_blank">巴蜀初一语文期末考试试题</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/1eJkqyEL6sKj.html" target="_blank">锦园生态养老中心简介</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/by0Sz7BfKLl.html" target="_blank">魏家凉皮报酬分析毕业论文</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/cG9phVWKRn.html" target="_blank">江苏省食品经营许可审查细则试行</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/dJB1Wcwtvn.html" target="_blank">岩体力学实验报告、指导书</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/iEbnMbb3Gq.html" target="_blank">致宾客的一封信</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/iVOtRk6JJV.html" target="_blank">定陶一中[最新]</a> </li> <li> <!-- <a target="_blank" href=""></a> --> <a href="https://m.ishare.iask.com/f/tFqcjQqEbK9.html" target="_blank">动火分析数据对照表</a> </li> </ul> </div> </div> </div> </div> <div class="rigthAside fl"> <!-- 作者信息 --> <div class="editer-con"> <div class="avatar-frame"> <img src="https://pic.iask.com.cn/1mwmgl6hn3.png" alt=""> </div> <div class="editer-info"> <div class="nickname">is_036899</div> <div class="editer-brief"> 暂无简介~ </div> </div> </div> <!-- 文章信息 --> <div class="paper-info"> <div class="info-item">格式:pdf</div> <div class="info-item">大小:2MB</div> <div class="info-item">软件:PDF阅读器</div> <div class="info-item">页数:39</div> <div class="info-item">分类:互联网</div> <div class="info-item">上传时间:2017-06-06</div> <div class="info-item">浏览量:9538</div> </div> <!-- 相关资料 --> <div class="related-file"> <div class="column-name">相关资料</div> <ul> <li class="file-item"> <a href="https://ishare.iask.com/f/iSmY52RQEB.html">贴吧小尾巴可爱语录</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/j3iIYCDkU7.html">科技的好处(Benefits of technology)</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/jc7EJEcEiO.html">双台面数字轨道衡使用说明书</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/lfS8jVVT5.html">初一想象作文赫尔墨斯和雕像者</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/tnHRy9L8qOn.html">眼镜架产品质量联动监督抽查产品及其生产企业名</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/1ssK1aOLyp.html">中小企业公司文件(发文)管理制度</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/1yFGj3WUgh1.html">Unit3 Part B Read and write说课稿</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/31YfNMRkMmg.html">[最新]论文 范文【 精品】240斤谷子引发赡养血案</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/31eNKeSHTIL.html">《我亦飘零久》读稿 陈苗苗</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/31moy85dHz9.html">会计考试英语部分:所有者权益(股东权益)</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/341QWTHn2B0.html">光谱的归一化和平滑</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/35mTrdaaWOC.html">川滇黔十县政协开发治理赤水</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/bwGudxaSIu5.html">The Catbird Seat</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/dol729aNjx.html">第8周《西游记》周测第20-26回(含答案)</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/j0446ihpni.html">江陵县质监局政风行风突出问题整改任务分解表</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/j27x2d2Zya.html">团课流程</a> </li> <li class="file-item"> <a href="https://m.ishare.iask.com/node/s/dkg2kqzk6dj4i.html">眼科医院感染管理制度</a> </li> <li class="file-item"> <a href="https://m.ishare.iask.com/f/1H3Ejhv8OUcy.html">固体制剂车间固体管理标准03偏差及偏差处理规定</a> </li> <li class="file-item"> <a href="https://ishare.iask.com/f/31doBbxAgGt.html">[汇编]三国周全战争宝贝代码</a> </li> <li class="file-item"> <a href="https://m.ishare.iask.com/f/2hkaqcuGzQP.html">高中成绩单(英文版)</a> </li> </ul> </div> <!-- 热门搜索 --> <div class="hot-search"> <div class="search-top"> <span class="column-name">热点搜索</span> <!-- <span class="swtich-bar">换一换</span> --> </div> <div class="search-list"> <a href="https://m.ishare.iask.com/f/2gNpCYtagLR.html">校园欺凌暴力事件预防及处理应急方案</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/341cUP3TDCr.html">西门子CT高压部件的检修</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/4MVRuoRcQuS.html">某建筑设计院绩效考核改革案例</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/6rHixxcrFqI.html">苏教版语文一年级上册《小河与青草》教案2</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/6xUDjFfgEpB.html">油浸式变压器结构图解</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/7717571.html">加菲猫2之双猫记 A.Tail.of.Two.Kitties 英语剧本</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/7ukhbNVe3z.html">大班认识日历</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/9LtrifsXPx.html">(完整word版)Peter_Newmark_与“文本翻译理论”与不同的翻译方法</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/R4RfstDC4eQ.html">科技创新大赛范文</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/dOu7cwSRuL.html">校园安全教育教案</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/j2G7cIWnPs.html">旅客伤预防及处理培训资料(客运段)</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/36HzoG00VP.html">PLC课设 四条皮带运输机的传送系统</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/1W3oxSke0HI.html">全国2013年01月自学考试00147《人力资源管理(一)》历年真题含答案</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/13tXWbrvZksB.html">安徽省2018年建设工程工程量清单计价办法(市政工程定额章节说明)</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/2gNpCYtagLR.html">校园欺凌暴力事件预防及处理应急方案</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/341cUP3TDCr.html">西门子CT高压部件的检修</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/4MVRuoRcQuS.html">某建筑设计院绩效考核改革案例</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/6rHixxcrFqI.html">苏教版语文一年级上册《小河与青草》教案2</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/6xUDjFfgEpB.html">油浸式变压器结构图解</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/7717571.html">加菲猫2之双猫记 A.Tail.of.Two.Kitties 英语剧本</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/7ukhbNVe3z.html">大班认识日历</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/9LtrifsXPx.html">(完整word版)Peter_Newmark_与“文本翻译理论”与不同的翻译方法</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/R4RfstDC4eQ.html">科技创新大赛范文</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/dOu7cwSRuL.html">校园安全教育教案</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/j2G7cIWnPs.html">旅客伤预防及处理培训资料(客运段)</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/36HzoG00VP.html">PLC课设 四条皮带运输机的传送系统</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/1W3oxSke0HI.html">全国2013年01月自学考试00147《人力资源管理(一)》历年真题含答案</a> <!-- <a href=""></a> --> <a href="https://m.ishare.iask.com/f/13tXWbrvZksB.html">安徽省2018年建设工程工程量清单计价办法(市政工程定额章节说明)</a> <!-- <a href=""></a> --> </div> </div> </div> </div> <!-- 底部声明 --> <div class="website-footer"> <div class="footer-content"> <div class="footer-link"> <div class="earth-con"> <div class="file-groups earth-con-item"> <span>资料大全</span> <a href="/index/f-a.html " target="_blank">A</a> <a href="/index/f-b.html " target="_blank">B</a> <a href="/index/f-c.html " target="_blank">C</a> <a href="/index/f-d.html " target="_blank">D</a> <a href="/index/f-e.html " target="_blank">E</a> <a href="/index/f-f.html " target="_blank">F</a> <a href="/index/f-g.html " target="_blank">G</a> <a href="/index/f-h.html " target="_blank">H</a> <a href="/index/f-i.html " target="_blank">I</a> <a href="/index/f-j.html " target="_blank">J</a> <a href="/index/f-k.html " target="_blank">K</a> <a href="/index/f-l.html " target="_blank">L</a> <a href="/index/f-m.html " target="_blank">M</a> <a href="/index/f-n.html " target="_blank">N</a> <a href="/index/f-o.html " target="_blank">O</a> <a href="/index/f-p.html " target="_blank">P</a> <a href="/index/f-q.html " target="_blank">Q</a> <a href="/index/f-r.html " target="_blank">R</a> <a href="/index/f-s.html " target="_blank">S</a> <a href="/index/f-t.html " target="_blank">T</a> <a href="/index/f-u.html " target="_blank">U</a> <a href="/index/f-v.html " target="_blank">V</a> <a href="/index/f-w.html " target="_blank">W</a> <a href="/index/f-x.html " target="_blank">X</a> <a href="/index/f-y.html " target="_blank">Y</a> <a href="/index/f-z.html " target="_blank">Z</a> <a href="/index/f-09.html " target="_blank">0-9</a> </div> <div class="topic-groups earth-con-item"> <span>专题大全</span> <a href="/index/t-a.html " target="_blank">A</a> <a href="/index/t-b.html " target="_blank">B</a> <a href="/index/t-c.html " target="_blank">C</a> <a href="/index/t-d.html " target="_blank">D</a> <a href="/index/t-e.html " target="_blank">E</a> <a href="/index/t-f.html " target="_blank">F</a> <a href="/index/t-g.html " target="_blank">G</a> <a href="/index/t-h.html " target="_blank">H</a> <a href="/index/t-i.html " target="_blank">I</a> <a href="/index/t-j.html " target="_blank">J</a> <a href="/index/t-k.html " target="_blank">K</a> <a href="/index/t-l.html " target="_blank">L</a> <a href="/index/t-m.html " target="_blank">M</a> <a href="/index/t-n.html " target="_blank">N</a> <a href="/index/t-o.html " target="_blank">O</a> <a href="/index/t-p.html " target="_blank">P</a> <a href="/index/t-q.html " target="_blank">Q</a> <a href="/index/t-r.html " target="_blank">R</a> <a href="/index/t-s.html " target="_blank">S</a> <a href="/index/t-t.html " target="_blank">T</a> <a href="/index/t-u.html " target="_blank">U</a> <a href="/index/t-v.html " target="_blank">V</a> <a href="/index/t-w.html " target="_blank">W</a> <a href="/index/t-x.html " target="_blank">X</a> <a href="/index/t-y.html " target="_blank">Y</a> <a href="/index/t-z.html " target="_blank">Z</a> <a href="/index/t-09.html " target="_blank">0-9</a> </div> </div> <div class="copy-link"> <a class="website-home-link" href="/" target="_blank"> <img class="website-icon" src="//static3.iask.cn/v202404111630/images/footer_logo.png"> </a> <p class="footer-nav"> <a href="http://help.iask.com/helpCenter/5e15a72a474e3171f58ae2a6.html" rel="nofollow" target="_blank" class="footer-nav-link jsReplaceNavLink">网站声明 <span>|<span></a> <a href="http://help.iask.com/helpCenter/5d11e55e0cf2d66b81a5513f.html" rel="nofollow" target="_blank" class="footer-nav-link jsReplaceNavLink">侵权处理 <span>|<span></a> <a href="/node/feedback/feedback.html" rel="nofollow" target="_blank" class="footer-nav-link">投诉反馈 <span>|<span></a> <a href="http://help.iask.com/helpCenter/ishare.html" rel="nofollow" target="_blank" class="footer-nav-link">帮助中心 <span>|<span></a> <a href="/index/f-a.html" target="_blank" class="footer-nav-link">网站地图 <span>|<span></a> <a href="https://office.iask.com/" target="_blank" class="footer-nav-link">爱问办公</a> </p> <a class="copy-txt" href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank"><span class="beian">京ICP证000007-6</span> 爱问文库-Copyright © 2024 版权所有</a> <p class="web-copyright jsWebCopyright"> <a target="_blank" href="https://beian.mps.gov.cn/#/query/webSearch?code=33021202002483" rel="noreferrer"><img class="copyright-mark" src="//static3.iask.cn/v202404111630/images/common/ic_mark.png" alt="">浙公网安备 33021202002483</a> </p> </div> </div> <div class="footer-kefu"> <div class="footer-border"></div> <p>客服热线:0755-26904047</p> <p>工作日:9:00-18:00</p> <span class="btn-contact jsContactMeiqia" data-pageid="footer">在线客服</span> </div> <ul class="footer-qrcode-items"> <li class="qrcode-item"> <div class="qrcode-item-img"> <img src="//static3.iask.cn/v202404111630/images/ishare_gongxiang.jpg"> </div> <p class="qrcode-item-desc">关注爱问文库服务号</p> </li> </ul> </div> </div> <script> window.pageConfig = { page: {} }; seajs.use(["dist/spider/init.js"]); </script> <script type="text/javascript"> document.write(unescape( "%3Cspan id='cnzz_stat_icon_1279079195'%3E%3C/span%3E%3Cscript src='https://v1.cnzz.com/stat.php%3Fid%3D1279079195' type=" + "'text/javascript'%3E%3C/script%3E" )); </script> </body> </html>