- 浏览: 124121 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
iris_1992:
2005年以前,国外开原报表完全碾压国产软件,但是现在国内软件 ...
JasperReport实例 -
明子健:
如果要打印1000个学生的呢,难道点击1000次打印按钮
window.print()打印功能 -
niweiwei:
JasperCompileManager.compileRep ...
JasperReport实例
简介
本文概述了一些强大的,基本的DOM 级别一中的方法以及如何在JavaScript中使用它们。你将会学习到如何动态地创建,访问,控制以及移除HTML元素。这里提到的DOM方法,并非是 HTML专有的;它们在XML中同样适用。这里所有的示例,在任何全面支持DOM level1 的浏览器里都能正常工作;例如Mozilla浏览器或者其他基于Mozilla的浏览器,像网景公司的下一代导航者(Navigatior)浏览器等。这里的示例代码在IE5中也能正常工作。
Sample1.html概览
这段文字是通过一个实例代码来介绍了DOM的。那么我们从下面的HTML示例来开始吧。这段示例使用了DOM 级别一的方法,从JavaScript动态创建了一个HTML表格。它创建了一个包含了四个单元的小表格,并且在每个单元中含有文本。单元中文字内容是 “这个单元式y行x列”,来展示单元格在表格中所处的位置。
<head> <title>样例代码 - 使用 JavaScript 和 DOM 接口创建一个 HTML 表格</title> <script> function start() { // 获得从body的引用 var mybody=document.getElementsByTagName("body").item(0); // 创建一个TABLE的元素 mytable = document.createElement("TABLE"); // 创建一个TBODY的元素 mytablebody = document.createElement("TBODY"); // 创建所有的单元格 for(j=0;j<2;j++) { // 创建一个TR元素 mycurrent_row=document.createElement("TR"); for(i=0;i<2;i++) { // 创建一个TD元素 mycurrent_cell=document.createElement("TD"); // 创建一个文本(text)节点 currenttext=document.createTextNode("cell is row "+j+", column "+i); // 将我们创建的这个文本节点添加在TD元素里 mycurrent_cell.appendChild(currenttext); // 将TD元素添加在TR里 mycurrent_row.appendChild(mycurrent_cell); } // 将TR元素添加在TBODY里 mytablebody.appendChild(mycurrent_row); } // 将TBODY元素添加在TABLE里 mytable.appendChild(mytablebody); // 将TABLE元素添加在BODY里 mybody.appendChild(mytable); // 设置mytable的边界属性border为2 mytable.setAttribute("border","2"); } </script> </head> <body onload="start()"> </body> </html>
注意我们创建元素和文本节点的顺序:
- 首先我们创建了TABLE元素。
- 然后,我们创建了TABLE的子元素--TBODY。
- 然后,我们使用循环语句创建了TBODY的子元素--TR。
- 对于每一个TR元素,我们使用一个循环语句创建它的子元素--TD。
- 对于每一个TD元素,我们创建单元格内的文本节点。
现在,我们创建了TABLE,TBODY,TR,TD等元素,然后创建了文本节点;接下来,我们将每一个对象接在各自的父节点上,使用逆序:
- 首先,我们将每一个文本节点接在TD元素上
mycurrent_cell.appendChild(currenttext);
- 然后,我们将每一个TD元素接在他的父TR元素上。
mycurrent_row.appendChild(mycurrent_cell);
- 然后,我们将每一个TR元素接在他们的父TBODY元素上。
mytablebody.appendChild(mycurrent_row);
- 下一步,我们将TBODY元素接在他的父TABLE元素上
mytable.appendChild(mytablebody);
- 最后,我们将TABLE元素接在他的父元素BODY上。
mybody.appendChild(mytable);
请记住这个机制。你将会在W3C DOM编程中经常使用它。首先,你从上到下的创建元素;然后你从下向上的将子元素接在他们的父元素上。
下面是由javascript代码生成的HTML代码:
... <TABLE border=5> <tr><td>cell is row 0 column 0</td><td>cell is row 0 column 1</td></tr> <tr><td>cell is row 1 column 0</td><td>cell is row 1 column 1</td></tr> </TABLE> ...
下面是由代码生成的TABLE及其子元素的DOM对象树:
你可以只用一些DOM方法来创建这个表格和它内部的子元素。请在脑海中时刻保留你想要创建的数据结构的树之模型,这样有利于更简便的写出必须的代码。在图1的TABLE树中,TABLE有一个子元素TBODY。TBODY有两个子元素。每一个TR又含有两个子元素(TD)。最后,每一个TD有一个子元素--文本节点。
基本DOM方法 - Sample2.html
getElementByTagName
是文档接口(Document interface)和元素接口(Element interface)的中的方法,所以不管是根文档对象还是所有的元素对象都含有方法getElementByTagName
。用来通过它们的标签名称(tag name)来获得某些元素的一系列子元素。你可以使用的方法是:element.getElementsByTagName(tagname)
。
getElementsByTagName
返回一个有特定标签名称(tagname)的子元素列表。从这个子元素列表中,你可以通过调用item
和你想得到的元素的下标,来获得单个元素。列表中第一个元素的下标是0。上面的方法很简单,但是当你操作一个巨大的数据结构时还是应该小心一些。 OK,我们下一个话题中要继续对我们的表格例子进行修改。下面的示例更加简单,它意图展示一些基础的方法:
<html> <head> <title>样例代码 - 使用 JavaScript 和 DOM 接口操作 HTML 表格</title> <script> function start() { // 获得所有的body元素列表(在这里将只有一个) myDocumentElements=document.getElementsByTagName("body"); // 我们所需要body元素是这个列表的第一个元素 myBody=myDocumentElements.item(0); // 现在,让我们获得body的子元素中所有的p元素 myBodyElements=myBody.getElementsByTagName("p"); // 我们所需要的是这个列表中的第二个单元元素 myP=myBodyElements.item(1); } </script> </head> <body onload="start()"> <p>hi</p> <p>hello</p> </body> </html>
在这个例子中,我们设置变量myP
指向DOM对象body中的第二个p
元素:
- 首先,我们使用下面的代码获得所有的body元素的列表,因为在任何合法的HTML文档中都只有一个body元素,所以这个列表是只包含一个单元的。
document.getElementsByTagName("body")
- 下一步,我们取得列表的第一个元素,它本身就会body元素对象。
myBody=myDocumentElements.item(0);
- 然后,我们通过下面代码获得body的子元素中所有的p元素
myBodyElements=myBody.getElementsByTagName("p");
- 最后,我们从列表中取第二个单元元素。
myP=myBodyElements.item(1);
一旦你取得了HTML元素的DOM对象,你就可以设置它的属性了。比如,如果你希望设置背景色属性,你只需要添加:
myP.style.background="rgb(255,0,0)"; // 设置inline的背景色风格
使用document.createTextNode(..)创建文本节点
使用文档对象来调用一个createTextNode方法并创建你自己的文本节点。你只需要传递文字内容给这个函数。返回的值就是一个展示那个文本节点信息的对象。
myTextNode=document.createTextNode("world");
这表示你已经创建了一个TEXT——NODE(一个文字片断)类型的节点,并且它的内容是“world”,任何你对myTextNode的引用都指向这个节点对象。如果想将这个文本插入到HTML页面中,你还需要将它作为其他节点元素的子元素。
使用appendChild(..)插入元素
那么,通过调用myP.appendChild([node_element])你可以将这个元素设置成为第二个P的一个新的子元素。
myP.appendChild(myTextNode);
在测试了这个例子之后,我们注意到,hello和world单词被组合在了一个:helloworld。事实上,当你看到HTML页面时,hello和world两个文字节点看起来更像是一个节点。但是请记住它们在文档模型中的形式--是两个节点。第二个节点是一个TEXT_NODE类型的新节点,也是第二个P标签的第二个子元素。下面的图标将在文档树种展示最近创建的文本节点对象。
使用文档对象和createElement(..)方法创建新的元素
你可以使用createElement来创建新的HTML元素或者任何其它你想要的元素。比如,如果你想要创建一个新的P作为BODY的子元素,你可以使用前面例子的myBody并给它接上一个新的元素节点。使用 document.createElement("tagname")可以方便的创建一个节点。如下:
myNewPTAGnode=document.createElement("p"); myBody.appendChild(myNewPTAGnode);
使用removeChild(..)方法移除节点
每一个节点都可以被移除.下面的一行代码移除了包含在myP(第二个p元素)下面的文本节点world。
myP.removeChild(myTextNode);
最后你可以将myTextNode(那个包含了world单词的节点)添加给我们最后创建的P元素:
myNewPTAGnode.appendChild(myTextNode);
被修改的对象树的最后的状态如下:
动态创建一个表格(回到Sample1.html)
这一段落的剩余部分我们将继续修改我们sample1.html。下面的图展示了我们在示例中创建的表格的对象树的结构。
复习一下HTML表格结构
创建元素节点并将他们插入到文档树中
sample1.html中创建表格的基本步骤是:
- 获得body对象(文档对象的第一个元素)
- 创建所有元素。
- 最后,根据表格结构(上面图中所示)将每一个孩子节点拼接起来。下面的一段源码是经过修改的sample1.html
<head> <title>示例代码 - 使用Javascript和DOM Interfaces来处理HTML</title> <script> function start() { // 获得body的引用 var mybody=document.getElementsByTagName("body").item(0); // 创建一个标签名称为TABLE的元素 mytable = document.createElement("TABLE"); // 创建一个标签名称为在TBODY的元素 mytablebody = document.createElement("TBODY"); // 创建所有的单元格 for(j=0;j<2;j++) { // 创建一个标签名称为在TR的元素 mycurrent_row=document.createElement("TR"); for(i=0;i<2;i++) { // 创建一个标签名称为在TD的元素 mycurrent_cell=document.createElement("TD"); // 创建一个文字节点 currenttext=document.createTextNode("cell is row "+j+", column "+i); // 将文字节点添加到TD单元格内 mycurrent_cell.appendChild(currenttext); // 将TD单元格添加到TR行中 mycurrent_row.appendChild(mycurrent_cell); } // 将TR行添加到TBODY中 mytablebody.appendChild(mycurrent_row); } // 将TBODY添加到TABLE中 mytable.appendChild(mytablebody); // 将TABLE添加到BODY中 mybody.appendChild(mytable); // 设置边界属性为2 mytable.setAttribute("border","2"); } </script> </head> <body onload="start()"> </body> </html>
使用CSS和DOM来操作表格
从表格中获得一个文字节点
示例介绍了两个新的DOM属性。首先,使用childNodes属性来获得mycel的孩子节点列表。childNodes列表包括所有的孩子节点,无论它们的名称或类型是什么。像getElemengByTagName一样,它返回了一个节点列表。不同的是,getElementByTagName只返回指定标签名称的元素。一旦你获得了返回的列表,你可以使用item(x)方法来使用指定的元素。这个例子在表格的第二行第二个单元格中的myceltext中保存了一个文字节点。然后,运行这个例子并观察结果,他创建了一个新的文字节点,这个文字节点的内容是myceltext的值,并且将这个文字节点作为了BODY元素的一个孩子。
mybody=document.getElementsByTagName("body").item(0); mytable=mybody.getElementsByTagName("table").item(0); mytablebody=mytable.getElementsByTagName("tbody").item(0); myrow=mytablebody.getElementsByTagName("tr").item(1); mycel=myrow.getElementsByTagName("td").item(1); // mycel的孩子节点列表的第一个元素 myceltext=mycel.childNodes.item(0); // currenttext的内容是myceltext的内容 currenttext=document.createTextNode(myceltext.data); mybody.appendChild(currenttext);
获得一个属性的值
在sample1的最后我们在mytable对象上调用了setAttribute。这个调用是用来设置表格的边界属性的。然后是用了getAttribute方法来获得一个属性的值:
mytable.getAttribute("border");
通过改变样式属性来隐藏一列
一旦你在你的javascript变量中保存了一个对象,你就可以直接为它设置样式属性了。下面的代码是修改后的sample1.html,在这里,第二列的每一个单元格都被隐藏了。而且第一列中的每一个单元格改为使用红色背景。注意,样式属性是被直接设置的。
<html> <body onload="start()"> </body> <script> function start() { var mybody=document.getElementsByTagName("body").item(0); mytable = document.createElement("TABLE"); mytablebody = document.createElement("TBODY"); for(j=0;j<2;j++) { mycurrent_row=document.createElement("TR"); for(i=0;i<2;i++) { mycurrent_cell=document.createElement("TD"); currenttext=document.createTextNode("cell is:"+i+j); mycurrent_cell.appendChild(currenttext); mycurrent_row.appendChild(mycurrent_cell); // 当column为0时,设置单元格背景色;column为1时隐藏单元格 if(i==0) { mycurrent_cell.style.background="rgb(255,0,0)"; } else { mycurrent_cell.style.display="none"; } } mytablebody.appendChild(mycurrent_row); } mytable.appendChild(mytablebody); mybody.appendChild(mytable); } </script> </html>
发表评论
-
js 设置焦点到文本的最后
2011-08-02 14:14 1032function getSelectPos(objId) ... -
js replaceAll
2011-08-02 10:47 781String.prototype.replaceAll ... -
js 排序
2010-01-07 11:25 1772<html><head><met ... -
window.print()打印功能
2010-01-06 16:48 5017按钮调用Print()方法直接打印body中的内容。 ... -
js 去掉所有空格
2009-12-16 13:57 1190function trim(s) { var reg ... -
js 校验时间的正则表达式
2009-12-16 11:35 1787<script language="javas ... -
动态加入table中tr的onclick事件
2009-11-09 14:03 1451<HTML> <HEAD> ... -
jQuery Tooltip 随鼠标移动的层
2009-11-06 13:26 655例子见附件! -
js 获取本周的日期
2009-11-02 12:28 7320function formOnload(){//按周日为一周的 ... -
js 日期大小比较 (yyyy-MM-dd)
2009-10-29 15:37 2077<script> //直接比较// t1=&q ... -
js 传递中文参数 至 action 乱码问题
2009-10-26 14:21 1792前台js: function ajaxClick ... -
js 动态下拉列表
2009-10-26 13:20 681var sortNames ="南山;宝安;福田&q ... -
JavaScript Cookies
2009-09-11 11:20 790cookie 用来识别用户。 实例 创建一个 ... -
显示时钟
2009-09-11 11:18 697<html><head><scr ... -
领悟 JavaScript 中的面向对象
2009-09-11 10:53 741avaScript 是面向对象的。但是不少人对这一点理解得并不 ... -
JavaScript高级培训-自定义对象
2009-09-11 10:18 807JavaScript高级培训-自定 ... -
常用的正则表达式集合
2009-06-24 15:48 738正则表达式 正则表达式 ...
相关推荐
- **内容呈现方式**:虽然不假定读者熟悉所有技术细节(如DOM或JavaScript),但文档会通过初学者友好的介绍性材料、大量示例以及高级解释来帮助读者理解DOM的概念与应用。 #### 二、Gecko简介及API语法 - **Gecko...
这一部分关注于如何使用JavaScript来操作文档对象模型(DOM),从而实现动态网页的效果。 **关键点:** 1. **DOM 操作**:介绍如何创建、删除、修改 DOM 元素。 2. **事件处理**:讨论事件绑定、监听器及触发机制...
DOM允许开发者通过JavaScript或其他脚本语言来动态更新、添加或删除网页的元素,从而实现丰富的交互性和动态效果。 **CHM格式**全称为Compiled HTML Help,是微软推出的一种用于存储电子文档的文件格式。它将HTML...
2. 浏览器对JavaScript的执行机制:文档中提到,大多数浏览器采用单进程模型来处理用户界面(UI)更新和JavaScript的执行。这意味着在同一时间内,要么执行JavaScript代码,要么更新用户界面,无法同时进行。这种...
"Part2 JS Browser Document Event"涵盖了JavaScript在浏览器环境中如何利用DOM进行文档操作,以及如何响应和处理各种用户交互事件。了解这些概念对于编写交互式网页至关重要,它们是前端开发的核心技能之一。通过...
- **单进程模型**:大多数现代浏览器使用单一进程来处理用户界面更新和JavaScript执行,这意味着在任意时刻只能进行其中一种操作。 **技术细节:** - 当浏览器遇到`<script>`标签时,无论脚本是内联还是外部文件...
You will discover the advantage of duck typing in both Python and JavaScript, while you work with interfaces and generics in C#. With a fair understanding of interfaces, multiple inheritance, and ...
- **事件处理**:学习如何有效地管理和处理各种类型的DOM事件,包括事件冒泡、事件捕获等机制。 **细节探讨:** - **动态生成DOM**:利用文档片段(DocumentFragment)来批量添加多个节点,以减少浏览器重新计算...
在“Desarrollo_Interfaces_Tema7”这个主题中,我们主要关注的是使用JavaScript来开发用户界面的技术和方法。JavaScript是一种强大的、广泛应用于Web开发的编程语言,它为创建交互性和动态网页提供了基础。在这个...
XMLHttpRequest是早期的解决方案,而Fetch API是现代的、更强大且易于使用的替代品,提供了更好的错误处理和响应处理机制。 在"Interfaces-da-Web-main"这个项目中,很可能涵盖了上述接口的实践案例和应用。通过...
- **JSX**: React使用JSX语法,这是一种将HTML和JavaScript混合的语法糖,允许我们在JavaScript中书写类似HTML的结构,方便创建和操作DOM元素。 - **组件化编程**: React的核心理念是组件,每个组件都是独立的、可...