使用JavaScript和DOM动态创建表格(2)

 


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

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

sample2c.jpg
使用removeChild(..)方法删除节点
每个节点都可以删除。下面这行代码删除myP(第二个< p >元素)里包含单词world的文本节点。

myP.removeChild(myTextNode);

  最后你可以把包含单词world的文本节点myTextNode添加到新创建的< p >元素里:

myNewPTAGnode.appendChild(myTextNode);

  修正的对象树最后像这样:
sample2d.jpg
动态创建一个表格(回到Sample1.html)
文章的剩余部分将回到Sample1.html。下图显示了例子中创建的表格的对象树结构。
回顾HTML表格结构
sample1-tabledom.jpg
创建元素节点并把它们添加到文档树
创建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>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值