`

用DOM方法操作table对象

阅读更多

  这篇文章简单介绍了DOM 1.0一些基本而强大的方法以及如何在JavaScript中使用它们。你可以学到如何动态地创建、获取、控制和删除HTML元素。这些DOM方法同样适用于XML。所有全面支持DOM 1.0的浏览器都能很好地运行本篇的实例,比如IE5,Firefox等。
概况 - Sample1.html
  这篇文章通过实例代码介绍DOM。请从尝试下面的HTML例子开始。它使用DOM 1的方法由JavaScript动态创建一个HTML表格。它创建一个由四个包含文本内容的单元格组成的小表格。单元格的文字内容是:“单元格是第y行第x列”,表示单元格在表格中的行数和列数。 
 

<html>
<head>
<title>实例代码 - 使用JavaScript和DOM创建HTML表格</title>
<script>
function start() {
//获取body标签
var mybody = document.getElementsByTagName("body")[0];

// 创建一个<table>元素和一个<tbody>元素
mytable     = document.createElement("table");
mytablebody = document.createElement("tbody");

//创建所有的单元格
for(var j = 0; j < 2; j++) {
    // 创建一个<tr>元素
    mycurrent_row = document.createElement("tr");
    for(var i = 0; i < 2; i++) {
    // 创建一个<td>元素
    mycurrent_cell = document.createElement("td");
    //创建一个文本节点
    currenttext = document.createTextNode("单元格是第"+j+"行,第"+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>

 
注意我们创建各元素和文字节点的顺序:

1.创建< table >元素
2.创建< table >的子元素< tbody >
3.使用一个循环来创建< tbody >的子元素< tr >
4.分别使用循环为每一个< tr >创建子元素< tb >
5.为每一个< tb >创建文本节点

 

创建完< table >,< tbody >,< tr >,< td >元素和文本节点,我们使用相反的顺序把它们分别添加到自己的父节点。
1.将创建的文本节点添加到< td >里

mycurrent_cell.appendChild(currenttext);
2.将列< td >添加到行< tr >

mycurrent_row.appendChild(mycurrent_cell);
3.将行< tr >添加到< tbody >

mytablebody.appendChild(mycurrent_row);
4.将< tbody >添加到< table >

mytable.appendChild(mytablebody);
5.将< table >添加到< body >

mybody.appendChild(mytable);
记住这个方法。当你使用W3C DOM时会经常用到它。首先,你从上向下建立元素;然后从下向上把它们添加到父节点。
这是JavaScript代码生成的HTML:

...
<table border=5>
<tr><td>单元格是第0行,第0列</td><td>单元格是第0行,第1列</td></tr>
<tr><td>单元格是第1行,第0列</td><td>单元格是第1行,第1列</td></tr>
</table>
...
这是代码生成的表格元素和它的子元素的DOM对象树:

 

 你只需使用少量的DOM方法就可以构造这样一个表格和他的子元素。记住要时刻谨记你将创建的构造的模型树;这样会使编写代码更加简单。在图中的< table >树里,< table >有一个子元素< tbody >。< tbody >有两个子元素。< tbody >的每个子元素(< tr >)都有两个子元素< td >。最后,每个< td >有一个子元素:一个文本节点。  
基本的DOM方法 - Sample2.html
  getElementByTagName方法适用于文档和元素,所以文档根对象和所有的元素对象一样有 getElementByTagName 方法。你可以使用 element.getElementsByTagName(tagname) 来获取某个元素所有子元素的列表,使用标签名选择它们。
  element.getElementsByTagName 返回一个有特定标签名的子元素的列表。你可以通过调用一个item方法(传递一个index参数给它)来从这个子元素列表中获取一个元素。请注意列表第一个子元素的index为0。下一个主题继续前面的Table例子。下面这个实例更加简单,显示了一些基本的方法:

 

<html>
  <head>
  <title>实例代码 - 使用JavaScript和DOM创建HTML表格</title>
  <script>
function start() {
  // 获取一个包含所有body元素的列表(将只有一个)
  // 然后选择列表里的第一个元素
  myBody = document.getElementsByTagName("body")[0];

  // 获取body字元素中所有的p元素
  myBodyElements = myBody.getElementsByTagName("p");

  //获取p元素列表的第二个元素(索引从0开始)
  myP = myBodyElements[1];
}
</script>
  </head>
  <body onload="start()">
  <p>hi</p>
  <p>hello</p>
  </body>
</html>

  
在这个例子里,我们设置myP变量为表示body里第二个p元素的DOM对象。


1.获取一个包含所有body元素的列表

myBody = document.getElementsByTagName("body")[0];
因为一个有效的html文档只有一个body元素,这个列表讲只有一项。我们通过使用 [0] 选取列表的第一个元素来得到它。
2.获取blog子元素里所有的p元素

myBodyElements = myBody.getElementsByTagName("p");
3.选取p元素列表的第二项

myP = myBodyElements[1];


一旦获得一个html元素的DOM对象,你就可以设置它的属性。比如,你想设置style background color属性,只需要添加:

myP.style.background = "rgb(255,0,0)";
使用document.createTextNode(”..”)创建文本节点
使用文档对象调用createTextNode方法建立你的文本节点。你只需要输入文本内容。返回值是一个表示这个文本节点的对象。

myTextNode = document.createTextNode("world");
以上代码创建一个文本数据是“word”的TEXT_NODE类型(文字块)节点,变量myTextNode指向这个节点对象。你需要设置这个文本节点为其他节点元素的字节点来插入这个文本到你的html页面里。
使用appendChild(..)插入元素
所以,通过调用myP.appendChild([node_element]),你设置这个文本节点为第二个p元素的字节点。

myP.appendChild(myTextNode);
测试这个例子,注意“hello”和“world”两个词是连在一起的:“helloworld”。所以在当你看到html页面时两个文本节点hello和world看起来好像是一个节点,而实际上在这个文档模型里有两个节点。第二个节点是一个新的TEXT_NODE类型节点,并且是第二个p标签的第二个字节点。下图在文档树里显示了刚创建的文本节点。

 

createTextNode和appendChild是在hello和world之间添加空格的一种简单的方法。需要特别注意的是appendChild方法将添加在最后一个子节点后面,就像world被添加到hello后面。所以如果你想在hello和world之间添加一个文本节点需要使用insertBefore方法而不是appendChild。

使用文档对象和createElement(..)方法创建新元素
  你可以使用createElement方法创建新的HTML元素或者其他任何你想要的其他元素。例如,如果你想为< body >元素添加一个字节点< p >元素,可以使用前例中的myBody添加一个新的元素节点。创建一个节点只需要调用document.createElement(”tagname”)。例如:

myNewPTAGnode = document.createElement("p");
myBody.appendChild(myNewPTAGnode);

使用removeChild(..)方法删除节点
  每个节点都可以删除。下面这行代码删除myP(第二个< p >元素)里包含单词world的文本节点。
myP.removeChild(myTextNode);
  最后你可以把包含单词world的文本节点myTextNode添加到新创建的< p >元素里:

myNewPTAGnode.appendChild(myTextNode);
  修正的对象树最后像这样:


动态创建一个表格(回到Sample1.html)
  文章的剩余部分将回到Sample1.html。下图显示了例子中创建的表格的对象树结构。
回顾HTML表格结构

 

创建元素节点并把它们添加到文档树
创建sample1.html里的表格的基本步骤:

获取body对象(文档对象的第一项)
创建所有的元素
最后,按照上图的表格结构添加每一个字节点下面的源代码是sample1.html的注释
start函数的最后有一行新代码,使用另一个DOM方法setAttribute设置了表格的border属性。setAttribute方法有两个参数:属性名和属性值。你可以使用setAttribute方法设置任何元素的任何属性。

 

<head>
<title>实例代码 - 使用JavaScript和DOM创建HTML表格</title>
<script>
function start() {
// 获取body
var mybody = document.getElementsByTagName("body")[0];

// 创建<table>和<tbody>元素
mytable     = document.createElement("table");
mytablebody = document.createElement("tbody");

//创建所有的单元格
for(var j = 0; j < 2; j++) {
    // 创建一个 <tr> 元素
    mycurrent_row = document.createElement("tr");

    for(var i = 0; i < 2; i++) {
    // 创建一个<td> 元素
    mycurrent_cell = document.createElement("td");
    // 创建一个文本节点
    currenttext = document.createTextNode("单元格是第" + j + "行,第" + 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>

  
使用DOM和CSS处理表格
从表格中获取一个文本节点
  这个例子介绍两个新的DOM属性。首先使用childNodes属性获取mycel的字节点列表。这个childNodes列表包含所有的字节点,不管它们的名称和类型是什么。像getElementsByTagName方法一样,它返回一个字节点列表,使用 [ x ] 来获取想要的字节点项。这个例子将myceltext存储为表格第二行第二个单元格的文本节点。最后,它创建一个新的包含myceltext 的data 属性 的文本节点,并使它成为< body >元素的子节点,来显示这个例子的最后结果。

如果你的对象是文本节点,你可以使用data属性来获取它的内容

mybody      = document.getElementsByTagName("body")[0];
mytable     = mybody.getElementsByTagName("table")[0];
mytablebody = mytable.getElementsByTagName("tbody")[0];
myrow       = mytablebody.getElementsByTagName("tr")[1];
mycel       = myrow.getElementsByTagName("td")[1];

// mycel的字节点列表的第一项
myceltext=mycel.childNodes[0];

// currenttext的内容是myceltext的data
currenttext=document.createTextNode(myceltext.data);
mybody.appendChild(currenttext);
获取一个属性值
  在sample1的最后有一个单元格使用了mytable对象的setAttribute方法。这个单元格用来设置这个表格的border属性。使用getAttribute方法来获取这个属性:

mytable.getAttribute("border");
通过改变style属性隐藏列
  当你使用一个JavaScript变量指向对象,你可以立即设置它的style属性。下面的代码是sample1.html的修改,第二列的单元格都被隐藏,第一列的单元格背景改为红色。注意style属性是直接设置的。

 

<html>
<body onload="start()">
</body>
<script>
function start() {
var mybody =document.getElementsByTagName("body")[0];
mytable     = document.createElement("table");
mytablebody = document.createElement("tbody");

for(var j = 0; j < 2; j++) {
   mycurrent_row=document.createElement("tr");
   for(var i = 0; i < 2; i++) {
       mycurrent_cell = document.createElement("td");
       currenttext = document.createTextNode("单元格是:" + i + j);
       mycurrent_cell.appendChild(currenttext);
       mycurrent_row.appendChild(mycurrent_cell);
       // 如果在第0列设置单元格背景色
       // 如果在第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>
分享到:
评论
1 楼 Anddy 2009-04-22  

相关推荐

    DOM对象DOM对象DOM对象.doc

    table对象是HTML表格元素的DOM表示,它有一些属性和方法用于操作表格: - `align`、`background`、`bgColor`、`border`、`borderColor`:设置或获取表格的布局和样式属性。 - `offsetHeight`、`offsetLeft`、`...

    038HTML-DOM对象.doc

    DOM将网页解析成一个结构化的对象树,使得我们可以使用JavaScript或其他脚本语言来动态地操纵网页内容。在这个文档中,主要讨论了HTML DOM中的...在实际开发中,掌握DOM操作是提高网页应用性能和功能的关键技能之一。

    Html dom _BOM 模型 _事件处理机制 _面向对象基础

    DOM中常见的对象包括Select、Option、Table、TableRow、TableCell等,这些对象有着特定的属性和方法,比如Select对象的选项数、Option对象的文本和值、Table对象的行和列操作等。 2. BOM模型(浏览器对象模型) BOM...

    js表格操作,DOM实现数据动态增删查改

    在本主题"js表格操作,DOM实现数据动态增删查改"中,我们将深入探讨如何使用原生JavaScript通过DOM操作来实现数据在表格中的动态管理。 1. **创建表格**:首先,我们需要在HTML中创建一个基础的表格结构。这通常...

    基于javascipt-dom编程 table对象的使用

    在JavaScript中,我们可以使用`document.getElementById("table1")`方法来获取ID为`table1`的表格对象。 2. 遍历表格中的每一行 通过循环遍历表格中的每一行,我们可以检查新输入的排名是否已经存在。如果存在,就...

    DOM常用属性和方法

    ### DOM常用属性和方法 ... 在DOM(Document Object Model,文档对象模型)的世界里...掌握了DOM的基本概念和使用方法后,就可以更加灵活地处理各种网页开发任务。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。

    文档对象模型(DOM)

    3. DOM操作: - `Document`对象提供了诸如`createAttribute()`、`createComment()`、`createElement()`和`createTextNode()`等方法来创建新的节点,并通过`getElementById()`和`getElementsByTagName()`来查找特定...

    JavaScript程序设计——DOM访问实验报告.docx

    实验报告的主题是“JavaScript程序设计——DOM访问”,其目的是深入理解和掌握DOM(Document Object Model)在JavaScript中的应用,包括文档对象的属性、方法以及使用方式。DOM是HTML和XML文档的标准化表示,允许...

    07-DOM操作表格

    DOM操作表格主要涉及以下几个方面: 1. **获取表格元素**:可以使用`document.getElementById()`、`document.querySelector()`或`document.querySelectorAll()`来获取表格、行、列或单元格。例如,`document....

    js操作table导出excel

    jQuery是一个广泛使用的JavaScript库,简化了DOM操作、事件处理和Ajax交互。HTML表格(table)是网页中组织结构化数据的常见方式,而Excel则是一种流行的电子表格应用程序,用于处理和分析数据。 要将HTML表格转换...

    Layui组件Table绑定行点击事件和获取行数据的方法

    Layui是一个前端UI框架,它提供了一...对于前端开发者来说,掌握如何操作DOM元素以及如何利用事件驱动的编程模式是十分必要的。通过对Layui组件Table的深入学习和实践,可以有效地提高前端开发的效率和页面的交互性。

    AJAX文档对象模型DOM

    在JavaScript中,我们可以通过DOM提供的方法对文档进行操作。例如,`document.createElement()`用于创建新的元素节点,`document.createTextNode()`创建文本节点,`document.getElementById()`找到具有特定ID的元素...

    JavaScript的Table表格对象

    在实际应用中,JavaScript的Table表格对象还可以结合Ajax实现异步数据加载,或者使用框架如jQuery、React、Vue等进行更复杂的表格操作。通过熟练掌握这些方法,开发者可以创建出交互性更强、功能更丰富的Web应用表格...

    Web程序开发:第15章 DOM操作.pdf

    【Web程序开发:第15章 DOM操作】 在Web程序开发中,DOM(Document Object Model)扮演着至关重要的角色。DOM是一种国际标准,由W3C(万维网联盟)制定,它为HTML和XML文档提供了统一的访问和操作方式。DOM的核心...

    DOM 详解 作者:Table of contents;Steve Byrne;Gavin Nicol。。

    这部分定义了DOM中的基础接口,例如Element、Node、CharacterData等,它们构成了DOM操作的基本构建块。 1.2. 扩展接口 除了基本接口之外,DOM还包含扩展接口,如DocumentFragment、Attr和DocumentType,它们提供了...

    jQuery实现动态给table赋值的方法示例

    在网页开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理、动画以及Ajax交互等任务。本篇文章将深入探讨如何使用jQuery来动态地给HTML表格(table)赋值,通过一个具体的实例来展示相关技巧。...

    js动态操作table实例

    // 使用方法 addRow('李四', '30', '上海'); ``` 2. **删除行** 删除指定行,通常会根据用户的选择,例如删除选中的行: ```javascript function deleteRow(rowIndex) { if (table.rows.length &gt; 1) { // ...

    全面的table操作解压即可使用

    在IT行业中,jQuery是一款广泛使用的JavaScript库,它极大地简化了DOM操作、事件处理、动画设计以及Ajax交互。在这个“全面的table操作解压即可使用”的压缩包中,我们可以期待找到一系列关于如何使用jQuery来增强...

Global site tag (gtag.js) - Google Analytics