无分页记录

您可以按 列表 | 普通 浏览

DOM浅析

[ 2008-7-22 17:54:26 | 作者:jiangt | 出处:原创 | 天气:晴 ]

DOM是文档对象化模型(Document Object Model)的简称。使用过DHTML对象模型的开发者一定能非常熟练地操作HTML页面上的每个标记内容,但如果借助DOM技术,我们就可以通过更加直接而且简易的方式达到同样的目的。

  一、概要

  DOM技术被Internet EXPlorer 5.0及以上版本的浏览器所支持,它采取一种非常直观且一致的方式将HTML文档进行模型化处理,并借此提供访问、导航和操作页面的简易编程接口。通过DOM技术,我们不仅能够访问和更新页面的内容及结构,而且还能操纵文档的风格样式。DOM由W3C组织所倡导,这样,大多数浏览器都将最终支持这项技术。

  DOM和DHTML对象模型的比较

  可以这么说,DOM是从DHTML对象模型发展而来的。但更准确而言,DOM更象是对DHTML对象模型进行了根本变革的产物。

  借助DHTML对象模型技术,我们能够单独地访问并更新HTML页面上的对象,每个HTML标记通过它的ID和NAME属性被操纵,每个对象都具有自己的属性、方法和事件,通过方法操纵对象,通过事件触发因果过程。

  DOM则要比DTHML对象模型功能更全面,它提供了一个对整个文档的访问模型,而不仅仅再局限于单一的HTML标记(Tag)范围内。DOM将文档描绘为一个树形(Tree)结构,Tree的每个节点表现为一个HTML标记或者HTML标记内的文本项。树形结构精确地描述了HTML文档中标记间以及文本项间的相互关联性,这种关联性包括child(孩子)类型、parent(双亲)类型和兄弟(sibling)类型。

  使用DHTML对象模型访问和更新HTML页面内容时,不可避免地需要查询相关技术手册。因为HTML对象很多,每个HTML对象又有很多的属性、方法和事件。但是采用DOM技术访问和更新HTML页面内容时,任何手册都可以放在一边了。首先查看一下HTML源代码,推算出页面的Tree结构模型;然后,按照层次结构关系操纵需要的属性。比如要更新页面上的文本项内容,如果采用DTHML对象模型,需要使用到innerHTML属性,但必须要注意并不是所有的HTML对象都支持innerHTML属性;如果采用DOM技术,只要修改相关Tree节点都具有的nodeValue属性值即可。

  DOM技术使我们可以方便地沿着文档的树型结构在上、下以及一侧方向做节点导航,从页面的任何地方开始,使用child、parent或者sibling三种关联性组成的表达式代表页面的另外地方。而DTHML对象模型不包含Tree结构,所以也就不具备页面对象的相互导航功能。当我们从一个标记对象开始时,不可能用关联表达式来表达相近的标记。虽然对于某些标记,比如 <TABLE> ,DHTML对象模型可以提供特殊的属性和方法存取相关内容,但实现方式和效果远不如DOM技术显得一致化和直观化。采用DTHML对象模型访问<TABLE> 中的单元(cell)内容时,首先要查询手册确定单元的坐标值i、j,然后再通过表达式tableObj.rows[i].cells[j].innerHTML实现访问。但对于DOM来说,访问TABLE每个单元的内容将变得非常简单,只需要建立一个节点导航表达式就可以。

  另外,DOM技术允许我们操纵文档的Tree结构,这包括创建新节点(nodes)、删除存在的节点以及在Tree中移动节点。实际上,这就是执行创建新标记(tags)、删除存在的标记以及在文档中移动标记的过程。DTHML对象模型则不允许更改文档结构,我们只能操纵现有的对象。

  与DHTML对象模型相比较,DOM只有一个缺憾:DOM不能支持事件处理,而DTHML对象模型对于文档对象则拥有一个广泛的事件处理功能

二、DOM的常用属性和方法:

1.用于处理XML文档的DOM元素属性:

childNodes:返回当前元素的所有子元素的数组.

firstChild:返回当前元素的第一个下级子元素.

lastChild:返回当前元素的最后一个下级子元素.

parentNode:返回元素的父节点.

previousSibling:返回当前元素的前一个兄弟元素.

nextSibling:返回当前元素的下一个兄弟元素.

n

分类:默认分类 | 部落: | 评论:0 | 阅读全文(121)

JavaScript面向对象编程

[ 2008-7-22 12:29:10 | 作者:jiangt | 出处:原创 | 天气:晴 ]

面向对象对象的编程,是Java、C#等众多面向对象的编程语言支持的基本特性。
继承、封装、多态是三种基本特性。面向对象的编程使我们更好地用程序代码描述客观世界,比起面向过程的函数式开发效率更高,也更能够把精力集中到业务中来。今天,我就面向javascript的OOP谈一些自己的想法。以下文档中简称JS。
一、前言

动态网页技术分为客户端和服务器端。服务器端的技术如ASP、PHP、JSP。

这些活动服务器技术它们都是以某中编程语言为支持,在"服务器端"因时因需地对数据实现动态存取。而客户端对这些数据作展示地无疑是HTML,HTML天生是静态的。有了服务器端技术的支持。对于客户而言,他已经感觉到了动态交互的存在,然而这种交互是建立在Client和Server的频繁往复代价之上的。
Web设计有一条金科玉律:尽量减少服务器端和客户端的往返交互。基于此目的,以胖客户形式出现的Web客户端出现了。当然任何事情物极必反,我们不可能使Web的胖客户端去做服务器的事情,否则我们有回归到了C/S架构程序设计的原点。
而实现客户端动态技术的常用编程语言无疑是javascript和vbscript.javascript是一种被广泛支持的脚本语言.而vbscript目前主要运行在IE里面.下面我们讨论javascript的面向对象特性.
二、javascript OOP
(一)、OOP的一些基本概念。

面向对象的编程经常有以下概念:类、对象、属性、方法。那么,<i>&#106avascript</i>是否也有这些概念呢?回答是当然有,我们就是要讨论这些概念在<i>&#106avascript</i>中的实现方法。

1.类和对象:Java和C++和C#等强类型的编程语言他们为了实现面向对象的概念,采取的方案是定义类,然后采用new关键字实例化类的对象。<i>&#106avascript</i>中没有类的概念,取而代之的是"原型"这样一个概念。也就是说在OOP语言里面的 类与对象在<i>&#106avascript</i>里面对应的原型和对象.如下:

OOP(Java、C++、C#): 类 ---> 对象
javascript:

原型 ---&gt; 对象

但是我们并不需要定义这个原型,而定义一个构造函数,通过这个函数构造对象.而这个构造器上就有这个原型对象,如下代码:
<script type="text/javascript">
//对象的构造函数
function Person(){
}
//显示这个构造器上的原型对象是否为空
alert(Person.prototype != null);
</script>
2.原型和对象成员的动态性:

不同强类型的OOP语言,类的成员是在类定义时确定,在运行时候不可以修改或删除,我们把这种对成员的访问行为称为早期绑定。js原型和对象的成员完全可以在运行时候动态确定,我把这种对成的访问行为称为晚绑定。毫无疑问,晚绑定效率低于早绑定。其实在Java语言中面向对象中的多态特性就是一种晚期绑定。在JS中如下:

2.1.对象上的晚期绑定:

&lt;script type="text/<i>&#106avascript</i>"&gt;

function Pet(){

//早属性邦定

this.number = "pet_001";

this.name = "tigger";

}

var p = new Pet();

//晚邦定添加属性成员

p.age = 2;

//晚邦定添加方法成员

p.speak=function(){

alert(this.name + " 汪汪!!!");

}

p.speak();

&lt;/script&gt;

2.2.原型上的晚期绑定:

&lt;script type="text/<i>&#106avascript</i>"&gt;

function Pet(){

//早期属性邦定

this.number = "pet_001";

this.name = "tigger";

}

var p = new Pet();

//晚邦定添加属性成员

Pet.prototype.age = 2;

//晚邦定添加方法成员

Pet.prototype.speak=function(){

alert(this.name + " 汪汪!!!");

}

p.speak();

&lt;/script&gt;

如果构造器有一个原型对象,则由该构造器创建的对象都都必须复制自该原型对象,如下代码:
<script typ

分类:默认分类 | 部落: | 评论:1 | 阅读全文(107)

IOC容器实现探索(C#)

[ 2008-7-10 0:17:31 | 作者:jiangt | 出处:原创 | 天气:晴 ]

不得不佩服微软对反射技术的封装,非常简单易用.反射的运用与尝试不在是少数人所为.以此来实现IOC思想的容器,如果仅就技术实现角度而言,真实垂手可得.
时间关系,只有后续了......

分类:默认分类 | 部落: | 评论:1 | 阅读全文(105)

谈C#反射的运用

[ 2008-7-7 23:53:33 | 作者:jiangt | 出处:原创 | 天气:晴 ]

请在下面框中选中摘要的内容

分类:默认分类 | 部落: | 评论:0 | 阅读全文(130)

无分页记录

您可以按 列表 | 普通 浏览

导航

归档

日历

我的简历

  • 姓名:jiangt
  • 性别:男
  • 注册日期:
  • Email:shichang@cd-accp.com
  • 城市:成都
  • 发消息给我

公告

欢迎光临我的博客!

部落

  • 没有加入任何部落!

最新回复

联接

统计

  • 访问人数:940 人
  • 创建时间:2008-6-23
  • 发表文章:4 篇
  • 上传相片:0 张
  • 回复总数:2 篇
  • 阅读总数:463 次
  • RSS订阅
  • mozilla firefox:支持WEB标准的最佳浏览器
  • 程序开发商:慈溪都市博客
  • 理论上本站符合XHTML标准,但由于用户输入日志的不确定性,可能会有几个错误通不过