Javascript编程语言和DOM接口系列教程(1)

2016-02-20 00:52 11 1 收藏

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。

【 tulaoshi.com - Web开发 】

 Hello,今天开始彬Go将以系列教程的方式为大家讲解Javascript编程语言和DOM接口,本篇教程为该系列的第一部分。

  虽然现在一些js框架诸如jQuery、Prototype和MooTools能提高我们的前端开发效率而且很好的解决了浏览器兼容性问题,但我们仍要打好javascript技术基础。Javascript DOM 控制系列教程将告诉你你需要了解的javascript和文档对象模型(DOM)的本质。

引言JavaScript

  JavsScript是可以在各种不同环境下使用的动态的松散类型(loosely typed)、基于原型的编程语言。除了作为流行的Web客户端程序语言,它还可以使用于IDE插件、PDF文件或给予其它平台甚至更为抽象的概念。
  JavaScript 是由来自Netscape得Brendan Eich创造的基于ECMAScript标准(ECMA-262)的语言。他最初被命名为LiveScript,但后来被改为JavaScript,这也是很多人会把它跟java混淆的原因之一。

以下是它的一些特性的详细说明:

动态程序语言在运行时执行;他们并没有编译。正因为此,有时JavaScript被认为是一种脚本语言,而不是一个真正的编程语言(显然是一种误解)。 松散类型语言不要求强类型系统,如果你使用C或Java编程(与JavaScript不同)声明变量时你就明白必须声明类似’int’(整型)。JavaScript的不同之处在于你用不着指定它的类型。 在JavaScript中我们使用原型来实现类似继承的效果,JavaScript不支持类。 JavaScript也是函数式语言,它处理函数为优先对象。它是基于下的理念。

 

  理解以上概念对于学习JavaScript这门技术关系并不是很大。只是让大家对JavaScript有个初步正确的的认识,并了解JavaScript与其它编程语言的本质区别。

文档对象模型

  文档对象模型(Document Object Model),通常简称为DOM,是网站内容与JavaScript互通的接口。自JavaScript成为最常用的语言时JavaScript和DOM通常被视为独立的实体。DOM接口用于存取、遍历和控制HTML和XML文档。

javascript-dom-教程
点击图片查看原始大小

下面是关于DOM的一些重要的知识:

window对象作为全局对象,你仅需尝试使用window来访问它。Window对象下包含了你的所有要执行的JavaScript代码。就像所有对象都包含属性和方法。 属性是存储于对象下的变量。所有在网页中创建的变量都会成为window对象的属性。 方法是存储在对象下的函数。在所有函数存储在window对象下时,你可以使用’methods’引用它们。 DOM相对于Web文档结构创建层次结构,层次有节点组成。DOM节点有很多不同的类型,其中最重要的要数’Element’、’Text’和’Document’了. ‘Element’节点表示在页面中的元素,所以如果在页面中你有一个段落元素(’p’),那么你可以通过DOM的节点来访问它。 ‘Text’节点表示在页面中的所有文本(在元素中),所以如果在页面的段落中有一些文本内容,那么你可以通过DOM的节点来访问它。 ‘Document’节点表示整个文档。(它是DOM树的根节点) 另请注意,元素属性是DOM节点本身。 不同的布局引擎对于DOM标准的执行是有一定的差别的。例如,使用Gecko布局引擎的FireFox浏览器可以很好的执行(但也并不是完完全全按照W3C规范那样),但使用Trident引擎的IE因它的很多Bug和不完全执行DOM标准而为众人所知。这便是前端开发领域的一大痛苦之处。 下载FireBug

  如果你使用Firefox浏览器但没有用过FireBug扩展插件,那我强烈推荐你现在就下载安装。它是活的整个文档结构大题图片的非常有用的前端工具。

网页中的JavaScript

Script元素
当你想在网站上使用JavaScript的时候,需要让它们包含在script元素中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"  
xmlns= =  
     
      = = /  
      JavaScript!/  
  /  
   
   
    =  
    // ![CDATA[  
         
    // ]]  
    /  
         
  /  
/

  正如你所见在文档下面有script元素。其实type属性严格来讲应设置为application/javascript,但它不出所料的在IE浏览器下无法正常工作,所以我们使用text/javascript或不用type属性,如果你在意代码W3C规范验证的话建议你使用前者(text/javascript)。

javascript-dom-教程
记得用CDATA指定你的脚本。(点击上图查看大图)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  你还会注意到在script元素中我们还有一对被注释掉的代码行,它们告诉支持XHTML的浏览器script元素中的内容是字符数据而不应被解释为XHTML标记。如果你计划在JavaScript代码中使用’’或’’字符的话那它就是相当必要的。当然,如果你是用普通HTML代码的话,那你完全可以无视它。

defer属性
  我们script元素中的JavaScript代码会在页面读过程中执行,唯一的例外就是当script元素有defer属性的时候。默认情况下,当浏览器遇到script元素时,它会停下来并运行代码,然后再继续进行文档解析。defer属性告诉浏览器代码包含非变更文档代码而且可以稍后执行。它的唯一问题就是只在IE下可用,所以我们还是要尽量不要使用它了,了解就行:)

链接外部脚本
  如果你想连接一个外部脚本文件,那么你只需为你的script元素添加一个有文件地址的src属性。把脚本文件独立分离出来进行调用的确相对于内联脚本来说是个好办法,它意味着浏览器可以缓存该文件,而且你都不用担心那些CDATA之类的废话。

1
script type= src=/script JavaScript 要点

  在我们继续讲DOM之前有必要学习一下JavaScript基础要点,如果有些东西你理解起来有些困难,别担心,你早晚会搞定它的。
  在JavaScript种不同类型的值,它们是数值、字符串、布尔值、对象、Undefined 和 Null。
  单行注释使用两个斜杠(//),这行内的所有内容都将被作为注释内容理解。多行注释使用’/*’ 和 ‘*/’完成注释段落。

数值
在JavaScript中所有数值都被描绘成浮点值,当定义数值变量时记得不要用引号。

1
2
3
4
// 注: 要一直使用 'var' 来声明变量:
leftSide = 100;
topSide = 50;
areaOfRectangle = leftSide * topSide;

字符串
你定义的字符串都是有字面上来看,JavaScript不会对它进行处理。一个字符串可由一连串的Unicode字符组成,并由一对双引号或单引号包围。

1
2
3
4
5
firstPart = ;
secondPart = ;
allOfIt = firstPart + + secondPart; // Hello World!
// +号进行字符串连接处理
// (它还可用于数学上的加法运算)

布尔值
布尔类型在你进行条件判断的时候很有用,以了解是否符合指定的标准。布尔有两个可能的值:true和false。任何使用逻辑算法的比较结果都将是布尔值。

1
2
3
4
5
6
7
5 === (3 + 2); // = true
// 你可以给变量声明布尔值:
veryTired = ;
// 你可以像这样测试:
(veryTired) {
    // 你的代码
}

上面看到的’===’是比较运算符,我们将在后面讨论。

函数
函数是一个专门的对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 使用函数操作创建一个新函数:
myFunctionName(arg1, arg2) {
    // 这里是函数的代码
}
   
// 如果你省略掉函数名,那么你创建的是"匿名函数":
(arg1, arg2) {
    // 这里是函数的代码
}
       
// 执行函数仅需对他进行引用并使用圆括号 (附带参数):
myFunctionName(); // 无参数
myFunctionName(, ); // 带参数
   
// 你也可以在不声明变量的情况下执行函数
   
((){
    // 这就是所谓的自调用匿名函数
})();

数组
数组也是一个专门的对象,它可以包含任意数量的数据。要访问数组中的数据你就必须使用数字,用以引用其在数组中的索引。

1
2
3
4
5
6
7
8
9
10
11
// 两种声名数组的不同方式,
   
// 字面:
fruit = [, , ];
   
// 使用数组构造器:
fruit = Array(, , );
   
fruit[0]; // 访问数组中的第一个数据项 (apple)
fruit[1]; // 访问数组中的第二个数据项  (lemon)
fruit[2];

对象
对象是命名的的值的集合(键-值对),它和数组很相似,唯一的不同之处在于你可以为每个数据值指定名字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 两种声明对象的不同方式,
   
// 字面(大括号):
profile = {
    : ,
    age: 23,
    job: 'Web Developer'
};
   
// 适用对象构造器:
profile = Object();
profile. = ;
profile. = 23;
profile. = ;

if/else语句
if/else语句是JavaScript中最常见的结构,它看上去就像下面这样:

1
2
3
4
5
6
7
8
9
legalDrinkingAge = 21;
yourAge = 23;
   
( yourAge = legalDrinkingAge ) {
     // 我们使用'alert'来通知用户:
    ();
} {
    ();
}

JavaScript运算符
相比把运算符一一列举给你我建议你看看。它会为你讲解很多关于运算符的细节。我在下面的几个例子中也为你讲解了一些运算符的使用方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 加/减/乘/除
someMaths = 2 + 3 + 4 - 10 * 100 / 2;
   
// 等于
( 2 == (5 - 3 ) { } // == checks for eqaulity
   
// 不等于
( 2 != (5 - 3 ) { }
   
// 全等运算符:
// (我建议这样使用)
2 === 2 // Instead of 2 == 2
2 !== 3 // Instead of 2 != 3
   
// 赋值:
numberOfFruit = 9;
numberOfFruit -= 2; // 等同于 "numberOfFruit = numberOfFruit - 2"
numberOfFruit += 2;

循环
循环在遍历数组中的数据项或对象的所有成员时非常有用,JavaScript中最常用的循环是for和while语句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
envatoTutSites = [,,,,];
   
// WHILE循环
counter = 0;
lengthOfArray = envatoTutSites.;
(counter lengthOfArray) {
    (envatoTutSites[counter]);
    counter++; // 等同于 counter += 1;
}
   
// FOR循环
// (The i stands for "iterator" - you could name it anything)
( i = 0, length = envatoTutSites.; i length; i++) {
    (envatoTutSites[i]);
}

javascript-dom-实例教程
for循环在用于遍历数组的时候相当受欢迎,点击上图查看清晰大图

回到DOM

访问DOM节点
假设我们有一个包含了一个段落和一个无序列表的基本XHTML文档:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
xmlns= =
   
            = = /
            JavaScript!/
    /
   
     
        =My first paragraph.../
   
       
            List item 1/
            List item 1/
            List item 1/
            List item 1/
            List item 1/
        /
   
        =
        // ![CDATA[
     
       // ]]
        /
   
    /
/

在第一个例子中我们将使用’getElementById’这个DOM方法访问我们的段落。
(以下代码应在script元素中)

1
2
introParagraph = document.();

  变量’introParagraph’现在指向DOM节点,我们现在可以在这个节点上做很多事情,我们可以读取它的内容和属性,也可以控制它的任何方面。我们可以删除它、克隆它或将它移到DOM树的其它位置。
  我们可以使用JavaScript和DOM接口访问现在文档中的任何东西。所以,我们可能希望用类似的方式访问文档中的那个无序列表,但唯一的问题就在于它并没有ID。你可以给它一个ID属性并使用同样的方法访问它或者使用’getElementsByTagName’方法访问它。

1
2
3
allUnorderedLists = document.();
// 'getElementsByTagName' 返回当前存在的节点集合/列表
// 它除了那一点微小的差别外其实和数组很相似。

getElementsByTagName
  getElementsByTagName方法返回当前存在的节点集合/列表,它和数组的相似之处是它也有length属性。需注意的重要一点是这些集合是’即时’的,如果你在DOM中添加了一个新元素那么这个集合将自动自我更新。由于它和数组类似,所以我们可以使用索引来访问其中的每个节点,从0到这个集合的总长度(减1)。

1
2
3
4
5
6
7
8
9
10
11
// 访问单个无序列表: [0] index
unorderedList = document.()[0];
   
// 将UL中的列表项创建为节点列表:
allListItems = unorderedList.();
   
// 现在我们可以使用for循环遍历列表项:
( i = 0, length = allListItems.; i length; i++) {
    // 提取其文本节点并alert它的内容:
    ( allListItems[i].. );
}

javascript-dom-实例
访问DOM中的节点和属性,点击上图查看清晰大图

遍历DOM
  术语遍历就是用来描述访问整个DOM寻找节点的行为。DOM接口为我们提供了大量的节点属性以便我们在文档中的所有节点自由访问。
这些节点属性可以方便我们访问关联的/挨着的节点:

Node.childNodes:你可以使用它访问某个元素的所有直属子元素。它将返回一个类似数组的对象,你可以循环遍历它。数组中的节点可以包含所有不同类型的节点,如文本节点和其它类型的元素节点。 Node.firstChild:这个属性等同于访问’childNodes’数组的首项(’Element.childNodes[0]‘)。它是个捷径。 Node.lastChild:这个属性等同于访问’childNodes’数组的末项(’Element.childNodes[Element.childNodes.length-1]‘)。它也是个捷径。 Node.parentNode:这个属性可以让你访问当前节点的父节点,仅会有唯一一个父节点,如果想访问’祖父’级节点,可以使用’Node.parentNode.parentNode’,以此类推。 Node.nextSibling:这个属性可以让你访问DOM树同级下的下一个节点。 Node.previousSibling:这个属性可以让你访问DOM树同级下的上一个节点。

javascript-dom-实例

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  所以就想你看到的一样,遍历DOM就是如此简单,只要你熟练运用了他的那些节点属性。
  上图中需要注意的一点是:列表项只能在他们之间没有空格的情况下检索。因为在文档中你能得到文本节点和元素节点,而’ul’和’li’之间的空格也会被当做是一个节点(文本节点)。同样,无序列表严格意义上讲并不是段落的下一个兄弟节点,因为在他俩之间有空格,也就是另一个节点。通常在这种情况下,你可以遍历’childNodes’数组并测试它们的’nodeType’,'nodeType’值为1就是元素节点,2为属性,3为文本节点。
你可以浏览它的全部值列表。

就是这样
  这就是JavaScript基本运行方式,你可以使用本地DOM方法和属性漂亮的访问并提取文档中的元素。现在你可以脱离那些繁琐的框架而独立进行基本的DOM操作了。

敬请期待下节课

  好了,今天的课程先讲到这里。希望大家能在这篇’杂乱的’文章中学到些什么。下一部分我们将专注于实例的练习,我们还可能会涉及到浏览器事件模型。
  感谢你的耐心阅读。

来源:http://www.tulaoshi.com/n/20160220/1632719.html

延伸阅读
前言 本文译自《Slackware Linux Unleashed》(第三版) 一书的第27章: Programming in C. 关于本译文有任何的话请与我联系: mailto:con@nease.net. linux的发行版中包含了很多软件开发工具. 它们中的很多是用于 C 和 C++应用程序开发的. 本文介绍了在 Linux 下能用于 C 应用程序开发和调试的工具. 本文的主旨是介绍如何在 Linu...
标签: Web开发
使用JavaScript框架 在讲述 window 对象的时候,我们提到过,一个框架内的网页也是 window 对象,也就是说,Frame 对象也是 window 对象。用最容易理解的话说,每一个 HTML 文件占用一个 window 对象,包括定义框架的网页(“框架网页”)。在 IE 里用“iframe”标记在...
当我们使用着漂亮的界面,方便快捷的应用程序的时候。我们才会发现,以前曾编写的程序是多么的粗糙(TC编写的程序)。简单的界面,16色的显示系统,大大的落后于计算机的发展。简单的说就是杀鸡用牛刀。如何该改变这种情况呢?Microsoft公司在推出windows操作系统的时候给出了简单易行的解决方案。这就是WINDOWS平台API应用程序接口。当然A...
标签: Web开发
前言 相当不错的 Javascript 编程风格规范,建议大家采用此规范编写 Javascript。原文链接: http://dojotoolkit.org/developer/StyleGuide 。 翻译(Translated by):feelinglucky{at}gmail.com,转载请注明出处、作者和翻译者,谢谢配合。 本文地址: http://code.google.com/p/grace/wiki/DojoStyle 。 序 Any violation to...
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程我想就是...

经验教程

990

收藏

35
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部