DOM学习笔记(一)

由于学习Ajax的需要,使我不得不去学习DOM的有关知识,很早以前DOM对我来说是一个很抽象的概念。可是事实上,今天才发现DOM其实早就用过,只是自己以前用了不知道而已,那么什么是DOM呢?下面是我今天学习的一些笔记。

DOM是Document Object Model的缩写,即文档对象模型,可以把DOM年作是页面上数据和结构的一个树形表示。下面的结构是我们在XML中很熟悉的:

  1. <?xml version="1.0" encoding="gb2312"?>
  2. <employees>
  3.     <employee name="宋岩岩">
  4.         <job>办分文员</job>
  5.         <salary>6800</salary>
  6.     </employee>
  7.     <employee name="龙建华">
  8.         <job>高级工程师</job>
  9.         <salary>20000</salary>
  10.     </employee>
  11.     <employee name="李晓渊">
  12.         <job>部门经理</job>
  13.         <salary>10000</salary>
  14.     </employee>
  15. </employees>

事实上,上述所示就是一个有几个节点组成的DOM树结构。其中,employees是文档的根元素,在employees根元素里包含三个employee节点;而每个employee元素又包含两个节点:job、salary,并且都包含了相应的数据信息,这里employee节点还包含了一个属性。XML、HTML文档以及类似于XML、HTML结构的文档事实上都可以看成是一个DOM,所谓类似于XML、HTML结构就是像上面一样有根元素,根元素里又包含其他节点,节点里面有包含其他节点,而且节点还可以有属性等等。想一想,XML、HTML不正是这样的结构吗?这就是DOM结构。

DOM中的核心概念就是节点。DOM在分析XML文档时,将组成XML文档的各个部分(如元素、属性、文本、注释和处理指令等)映射为一个对象,这个对象就叫做节点。在内存中这些节点形成一棵文档树。而整棵树是一个节点,树中每一个节点就是一棵树或子树,可以认为DOM就是对这棵树的一个对象描述,我们通对访问树中的节点来存取XML文档的内容。

不过DOM的概念远不是我上面说的那么简单,但是我觉得可以这么简单的去理解。

DOM实际上可以看作是一组API(Application Program Interface,应用编程接口),它把HTML文档、XML文档等看作一个文档对象,DOM里面定义了很多对象以及对象的方法和属性,例如我们在JavaScript中经常要用到的一个方法getElementById(),在具体的编程中我们可以调用这些方法来操作我们的对象(XML文档和HTML文档等),包括使用DOM增加文档,定位文档结构,添加、修改、删除文档元素等。

DOM是独立于程序设计语言的,我们可以在JavaScript中使用DOM,我们也可以在Java中使用DOM,我们还可以在其他语言中以同样的方式使用DOM,这是DOM给我们带来的好处。

 

下面是使用DOM操作HTML文档的一个实例,该实例用于对分类信息进行管理,用户不但可以添加新的分类,而且可以删除当前已经存在的分类信息。如果用户没有输入新的分类名称,就单击“添加”按钮,将弹出一个对话框,以提示用户输入分类名称。该实例的部分代码如下所示:

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  4. <title>DOM操作HTML文档实例</title>
  5. </head>
  6. <body>
  7. <table style="width:400px; background-color:#99ccff;">
  8. <tbody>
  9.     <tr>
  10.         <td align="center" colspan="3"><b>分 类 管 理</b></td>
  11.     </tr>
  12.     <tr>
  13.         <td height="20" style="width:177px">增加分类</td>
  14.         <td height="20">
  15.             <input type="text" id="name" size="15" />
  16.         </td>
  17.         <td height="20">
  18.             <input type="button" id="submit1" value="添加" onclick="addSort();" />
  19.         </td>
  20.     </tr>
  21.     <tr>
  22.         <td height="20" style="font-weight:bold; width:177px" colspan="3">已添加的分类</td>
  23.     </tr>
  24. </tbody>
  25. </table>
  26. <table style="border:1px solid #000000;" width="400">
  27.     <tr>
  28.         <td>分类名称</td>
  29.         <td id="pos_1">操作</td>
  30.     </tr>
  31.     <tbody id="sortList"></tbody>
  32. </table>
  33. </body>
  34. </html>

用户可以单击“添加”按钮来添加分类名称,而当用户单击添加按钮的时候调用函数addSort(),该函数用于将新添加的分类显示在下面的表格当中,相关代码如下:

  1. <script language="javascript" type="text/javascript">
  2.     function addSort()
  3.     {
  4.         var name = document.getElementById("name").value.trim();
  5.         if(name == ""){
  6.             alert("请输入分类名称!");
  7.             document.getElementById("name").focus();
  8.             return;
  9.         }
  10.         var row = document.createElement("tr");
  11.         row.setAttribute("id",name);
  12.         var cell = document.createElement("td");
  13.         cell.appendChild(document.createTextNode(name));
  14.         row.appendChild(cell);
  15.         var deleteButton = document.createElement("input");
  16.         deleteButton.setAttribute("type","button");
  17.         deleteButton.setAttribute("value","删除");
  18.         deleteButton.onclick = function(){deleteSort(name);};
  19.         cell = document.createElement("td");
  20.         cell.appendChild(deleteButton);
  21.         row.appendChild(cell);
  22.         document.getElementById("sortList").appendChild(row);
  23.         document.getElementById("name").value = "";
  24.     }
  25.     </script>

在上述代码中,首先获取用户输入的分类名称,如果分类名称为空,则给出提示信息;如果分类名称不为空,则创建表格中的行及相应的单元格,并设置相应内容及属性。该实例呈现效果图如下所示:

 

 

在上图所示的页面中,用户可以单击“删除”按钮删除某一个存在的分类信息。此时将调用函数deleteSort(),相关代码如下:

 

  1. function deleteSort(id)
  2. {
  3.     if(id!=null)
  4.     {
  5.         var rowToDelete = document.getElementById(id);
  6.         var sortList = document.getElementById("sortList");
  7.         sortList.removeChild(rowToDelete);
  8.     }
  9. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值