位置: 编程技术 - 正文

Javascript & DHTML 实例编程(教程)DOM基础和基本API

编辑:rootadmin
一、什么是DOM? 什么叫DOM,DOM是文档对象模型(Document Object Model,是基于浏览器编程(在本教程中,可以说就是DHTML编程)的一套API接口,W3C出台的推荐标准,每个浏览器都有一些细微的差别,其中以Mozilla的浏览器最与标准接近。单纯的Javascript要结合DOM才能做DHTML编程,才能做出漂亮的效果、应用于WEB。这点几乎与其它的语言无异,正如C/C++需要库支持是一样的道理。否则就是单纯的在语法上做研究了。因此,必须要对DOM有一定的认识,才能把Javascript应用于WEB,或你的RIA应用当中,因为DHTML本质上就是操作DOM树。 以后的编程当中,希望你能够把DHTML.chm这本手册也拿上,如果你需要兼容gecko,把gecko的DOM手册也带上。因为API太多,想不起来的接口还可以查这本手册。 如果你要测试浏览器是否是支持DOM的,简单的一句就可以判断 <script> var isSupportDOM = !!document.getElementById; //两个取反,这已经在上节中说过了,意思是强制转型 alert("你的浏览器 " +(isSupportDOM?"":"不")+ "支持 DOM!"); </script> 二、DOM树 要注意:DOM树的根统一为文档根—document,DOM既然是树状结构,那么他们自然有如下的几种关系: 根结点(document) 父结点(parentNode) 子结点(childNodes) 兄弟结点 兄弟结点 (sibling) (sibling) 例子: 假设网页的HTML如下 <html> <head> <title>never-online's website</title> </head> <body> <div>tutorial of DHTML and javascript programming</div> </body> </html> 我们参照树的概念,画出该HTML文档结构的DOM树: html body head div title 文本 文本 从上面的图示可以看出 html有两个子结点,而html就是这两个子节点的父结点 head有节点title,title下有一个文本节点 doby下有节点div,div下有一个文本节点 三、操作DOM树 开篇已经说过,DHTML本质就是操作DOM树。如何操作它呢? 假设我要改变上面HTML文档中div结点的文本,如何做?[code]<html> <head> <title>never-online's website</title> <script> function changedivText (strText) { var nodeRoot = document; //这个是根结点 var nodeHTML = nodeRoot.childNodes[0]; //这个是html结点 var nodeBody = nodeHTML.childNodes[1]; //body结点 var nodeDiv = nodeBody.childNodes[0]; //DIV结点 var nodeText = nodeDiv.childNodes[0];//文本结点' nodeText.data = strText; //文本节点有data这个属性,因此我们可以改变这个属性,也就成功的操作了DOM树中的一个结点了 } </script> </head> <body> <div>tutorial of DHTML and javascript programming</div> <input onclick="changedivText('change?')" type="button" value="change"/> </body> </html> 从上面的示例可以看出,我们可以用上面的这种方法操作DOM树上的任一节点。(注:1. 跨域除外,跨域通常是在操作frame上,简单的说,就是两个frame不属于同一域名。2.上面的操作为了演示,采用的方法是从根结点一直到文本结点的遍历,在DOM方法上,有更简洁的方法,这些以后会有更多示例加以说明,下文中也会有介绍) 三、DOM节点。 细心些的朋友也许发现了,在上面写的HTML代码时用<>与</>包函起来的就是一个结点,事实上是这样的吗?答案是否定的。下面就是说说节点类型,否则在有的时候是会犯错误的。比如,你把上面的代码放到Mozilla firefox的浏览器里运行一下,就会知道了。 DOM中的结点类型比较多,这里写一些在HTML文档中(注:XML也是DOM树结构)常见的几种结点类型。 1、DOCUMENT_NODE (document)文档根结点类型,该枚举型的值是9. 2、ELEMENT_NODE (element)元素结点类型,该枚举型的值是1。上文中的html, body, div这些结点都是属于该类型。 3、TEXT_NODE (text)文本结点类型,该枚举型的值是3。上文中的文本,如:tutorial of DHTML and javascript programming就是属于该类型。 (注:一个空格也就可能是一个文本结点) 通常更需要注意的是文本结点,有可能一个回车,一个空格都是文本结点。这一点以后会碰到,当然,我们也有办法处理,这里先不要急,以后也会说到的。 四、DOM常用的API 这些常用的API是要记下来的,当然在非IE的浏览器里也会有效,是符合w3c的。这些API在以后的编程中会常常用到。正如每个编程平台所提供的API一样,常用必须记下来,节省时间从而提高编程效率。只写几个最常用的,其它的API会在以后的示例中写出。由浅而深,从易到难嘛。 1、获取ELEMENT_NODE,元素节点 1)、方法:document.getElementById(元素的Id),返回值为元素的节点引用。可以假想一下这个API的原理:象我们上面所做的是遍历每个节点(从根到我们所需结点),这个API,也可以想成是从根遍历,查询每个结点(空白结点和空结点除外),并获取该结点的id是否为指定的ID,如果是的话,就返回这个结点(注:在JS中,数组和对象是引用类型),如果没有就返回空。我们可以写写这个代码,帮助我们理解document.getElementById。下面是一个简单遍历BODY中元素的示例。 <html> <head> <title>never-online's website</title> <script> function myGetElementById (id) { var nodeRoot = document; //这个是根结点 var nodeHTML = nodeRoot.childNodes[0]; //这个是html结点 var nodeBody = nodeHTML.childNodes[1]; //body结点 var bodyChild = nodeBody.childNodes; //body的孩子 for (var i=0; i<bodyChild.length; i++) { //简单的遍历(指body的孩子下的深度为1) if (bodyChild[i].id==id) return bodyChild[i]; }; return null; } function TestGetElementById (id) { var node = myGetElementById(id); if (node!=null) { alert("找到结点 "+id+"!"); alert(node.childNodes[0].data); } else { alert("没有找到结点 "+id+"."); } } </script> </head> <body> <div id="aTestNode"></div> <div id="textNode">tutorial of DHTML and javascript programming</div> <input onclick="TestGetElementById('textNode')" type="button" value="change"/> </body> </html> 2)、属性:object.innerHTML,返回值:一个节点内的HTML值。该属性为可写属性。它虽然不是获取结点,但经常与获取结点相结合,所以我把它放在获取结点这一类,它的属性就类似于是纯文本节点属性中的data。以document.getElementById和object.innerHTML这两个API为例,我们就可以把上面所写的代码简化一下了,示例如下: <html> <head> <title>never-online's website</title> <script> function changedivText (strText) { var node = document.getElementById("textNode"); node.innerHTML = strText; } </script> </head> <body> <div id="textNode">tutorial of DHTML and javascript programming</div> <input onclick="changedivText('change?')" type="button" value="change"/> </body> </html> 3)、方法:object.getElementsByTagName(标签的名字),返回一个集合,该集合的把有元素都是有指定标签的元素。访问集合里的元素,可以用下标来访问。语法里的object,是指document(根)或者是一个ELEMENT_NODE。这个的原理示例我就不写了,可以作为一个作业,大家可以写写。这里写一些具体应用。如上例,我们还可以这样写。 <html> <head> <title>never-online's website</title> <script> function changedivText (strText) { var node = document.getElementsByTagName("DIV"); node[0].innerHTML = strText; } </script> </head> <body> <div>tutorial of DHTML and javascript programming</div> <input onclick="changedivText('change?')" type="button" value="change"/> </body> </html> 再取一个例子,注意,BODY下的结点深度为2。 <html> <head> <title>never-online's website</title> <script> function changedivText (strText) { var node = document.getElementById("nodeTest"); var myNode = node.getElementsByTagName("DIV"); myNode[0].innerHTML = strText; } </script> </head> <body> <div id="nodeTest"> <div>tutorial of DHTML and javascript programming</div> <input onclick="changedivText('change?')" type="button" value="change"/> </div> </body> </html> 二、动态创建与插入结点 1)、创建结点对象。document.createElement(tagname),tagname指的是一个标签,比如一个DIV,就是document.createElement("DIV"),它返回的是这个结点的引用。 2)、在body的尾部插入结点用document.body.appendChild(object),为了容易理解,下面这个示例,我用了IE专有的属性object.outerHTML,得到一个该元素的HTML标签内容(包括自身),这样会更容易看到效果。 <html> <head> <title>never-online's website</title> <script> function insertNode (strText) { alert("插入元素前的body HTML:n" +document.body.outerHTML); var node = document.createElement("DIV"); node.innerHTML = strText; document.body.appendChild(node); alert("插入元素后的body HTML:n" +document.body.outerHTML); } </script> </head> <body> <div>tutorial of DHTML and javascript programming</div> <input onclick="insertNode('change?')" type="button" value="change"/> </body> </html> 3)、在元素处插入结点。object.insertBefore(oNewNode [, oChildNode]),oNewNode为一个我们创建的结点,oChildNode是可选的,为object下的一个子节点。同样的,为了看到效果,我也用了outerHTML。示例 <html> <head> <title>never-online's website</title> <script> function insertNode (strText) { alert("插入元素前的body HTML:n" +document.body.outerHTML); var node = document.createElement("DIV"); var myNode = document.getElementById("textNode"); node.innerHTML = strText; document.body.insertBefore(node,myNode); alert("插入元素后的body HTML:n" +document.body.outerHTML); } </script> </head> <body> <div id="textNode">tutorial of DHTML and javascript programming</div> <input onclick="insertNode('change?')" type="button" value="change"/> </body> </html> 三、移除结点。 1) object.parentNode.removeChild(oChildNode),这个就是语法,下面看示例。 <html> <head> <title>never-online's website</title> <script> function insertNode (strText) { alert("插入元素前的body HTML:n" +document.body.outerHTML); var node = document.createElement("DIV"); var myNode = document.getElementById("textNode"); node.innerHTML = strText; document.body.insertBefore(node,myNode); alert("插入元素后的body HTML:n" +document.body.outerHTML); } function removeCreateNode() { alert("移除元素前的body HTML:n" +document.body.outerHTML); var node = document.getElementById("textNode"); node.parentNode.removeChild(node); alert("移除元素前的body HTML:n" +document.body.outerHTML); } </script> </head> <body> <div id="textNode">tutorial of DHTML and javascript programming</div> <input onclick="insertNode('change?')" type="button" value="insert"/> <input onclick="removeCreateNode()" type="button" value="remove"/> </body> </html> 这一节就先写到这里,下一节我们就可以用这几个简单的API做许多事情了,几个API就可以写出很多效果。:D

推荐整理分享Javascript & DHTML 实例编程(教程)DOM基础和基本API,希望有所帮助,仅作参考,欢迎阅读内容。

Javascript & DHTML 实例编程(教程)DOM基础和基本API

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Javascript & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例 效果DEMO:

Javascript & DHTML 实例编程(教程)(四)初级实例篇2—动画 上篇说了动态创建结点和删除结点的例子,这一篇说一些如何用setInterval和setTimeout做简单的动画。语法皆是window.setTimeout(fn,delay),window.setInterval(fn,delay)fn

javascript中的几个运算符 ||是这样运算的:从第一个开始,遇到有意义的返回,否则返回最后一个表达式(注意不一定是Boolean值);&&是这样运算的:从第一个开始,遇到无意

标签: Javascript & DHTML 实例编程(教程)DOM基础和基本API

本文链接地址:https://www.jiuchutong.com/biancheng/383959.html 转载请保留说明!

上一篇:Javascript & DHTML 实例编程(教程)基础知识

下一篇:Javascript & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例

  • 多交所得税退税会计分录
  • 减免的企业所得税需要计入应交税费吗
  • 所得税申报表的营业收入包括营业外收入吗
  • 向境外支付赔偿金需要发票么
  • 交通运输行业属于什么性质
  • 怎么快速金蝶数据入库
  • 平均分摊法计算公式
  • 天猫费率是什么
  • 固定资产大修理的标准
  • 非税收入如何审查
  • 应预缴的增值税
  • 固定资产处置的增值税税率
  • 应付借款利息分录
  • 前期物业开办费和承接费一样吗
  • 税率3%开成5%会罚款吗?
  • 未认证的进项税账务处理
  • 已结转的凭证可以取消结转吗
  • 应收账款已收回但是账面还有余额怎么处理
  • 搬运费计入
  • 做企业所得税汇算清缴前需要准备什么资料
  • 国税变更办税人怎么变更
  • 保安服务费可以开具专票吗
  • 旅游合同签订
  • 管理不善造成的损失怎么处理
  • 一般纳税人既有批发零售又有不动产租赁
  • 预付卡销售发票可以报销吗?
  • 原材料入账价值合理损耗
  • 购买机动车怎样抵扣进项税
  • 作废的发票没有验旧丢了怎么办
  • 跨年度的暂估入库账务处理
  • 减少子公司合并的风险
  • linux如何将命令结果输出到文件
  • windows11怎么回到桌面
  • 设置系统自动更新一般通过什么窗口
  • 预缴增值税会产生滞纳金吗
  • saimon.exe - saimon进程有什么用 有何作用
  • 进程aissca.exe
  • 个人出租车辆交税吗
  • vericut9.0环境变量
  • 强化学习——Q-Learning算法原理
  • php类的定义
  • 开红字发票导入信息不完整怎么处理?
  • js原型模式创建对象的优缺点
  • Python中tkinter的 Variable类
  • 企业所得税营业收入包括什么
  • 发票作废冲红怎么做账
  • 网页开票流程图解
  • 金蝶财务软件系统要求
  • 没有实收资本的股权原值
  • 企业账户在银行买黄金可以开发票吗
  • 企业所得税的营业成本怎么填
  • 营改增后一般纳税人按简易办法计税的规定
  • 企业所得税扣除项目
  • 营改增会计分录怎么做
  • 收到联营单位投入的款项98600元存入银行
  • 工会经费是应付职工福利还是管理费用
  • 关于注册资本的最新规定
  • 简易征收租赁税率3还是5
  • 存储过程sql server
  • windows下安装nas
  • window7 32位系统
  • linux动态库的制作
  • wbs是什么文件
  • 重装win7系统后鼠标键盘不能用
  • win7电脑总是自动安装乱七八糟的软件
  • windows8输入法
  • linux网络聚合
  • linux就该这么些
  • javascript标准
  • Bullet之了解Force Torque Impulse
  • 了不起的狐狸爸爸
  • vue只适合做单页项目吗
  • jquery代码实现鼠标点击
  • node js搭建服务器
  • python的cumprod
  • python内置函数format
  • 整理Javascript事件响应学习笔记
  • qpython pydroid
  • 怎么撤销税务三方协议
  • 税务局监督执纪存在问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设