黑马程序员-DOM(第四讲)

本文介绍如何使用JavaScript实现好友菜单的展开和隐藏效果,并兼容IE7及火狐浏览器。此外,还介绍了如何动态创建表格,包括设置行数和列数、添加样式以及实现动态删除指定行和列的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上讲的内容在ie6运行每有问题,但是你会发现在ie7和火狐运行都会有问题,这是由于浏览器内核的解析方式不同造成的。

实例:做个好友菜单(类似qq),完成展开闭合效果

<table id=goodlist>

<tr>

<td>

<a href=javascript:void(0) onclick=list(this)>好友菜单</a>

<ul>

<li>一个好友</li>

<li>一个好友</li>

<li>一个好友</li>

 

</ul>

</td>

</tr>

</table>

 

<style type=text/css>

table ul

{

list-style:none;

margin:0px;

}

 

//对表格框线进行定义,以及单元格的框线进行定义

table,table td

{

border:#8080ff 1px solid;

}

 

table td a:link,table td a:visited{

color:#1f6dff;

text-decoration:none;

}

</style>

 

 

怎么让好友列表隐藏呢?

我们用另一个布局display

table ul{

在这里加上 displaynone

}

 

 

预定义一些样式:

.open{

display:block;

}

.close{

display:none;

}

 

<script type=text/javascript>

//获取被操作的节点ul,先通过事件源超链接标签获取其父节点td,然后再通过父节点获取ul节点(为什么不直接获取超链接的兄弟节点呢?这是考虑到在火狐中的情况)

function list(node)

{

var oTdNode=node.parentNode;

var oUlNode=oTdNode.getElementsByTagName(ul)[0];

if(oUlNode.className==open)

{

oUlNode.className=close;

}

else

{

oUlNode.className=open;

 

}

}

</script>

 

现在想要实现开一个而关其他

首先获取到表格节点

var oTabNode=document.getElementById(goodlist);

var collUlNodes=oTabNode.getElementByTagNames(ul);

for(var x=0;x<collUlNodes.length;x++)

{

if(collUlNodes[x]==oUlNode)

{

if(collUlNodes[x].className==open)

{

collUlNodes[x].className=close;

}

else

{

collUlNodes[x].className=open;

 

}

 

}

esle

{

collUlNodes[x].className=close;

 

}

}

 

要使火狐也能实现这个效果:还得加个东西

table ul{

padding:0px;

}

 

 

 

二、创建表格:

列如:在页面中创建一个五行五列的表格

1)事件源。比如按钮

2)表格节点的存放位置

<input type=button value=创建表格onclick=creTable() name=crtBut/>

写个CSS文件,专门用来描述表格的

table.css

table{

border:#8080ff 1px solid;//随便写点东西就行

 

}

 

<style type=text/css>

@import url(table.css);

</style>

 

<script type=text/javascript>

function creTable()

{

//思路:

1、可以通过之前学过的creteElement创建元素的形式来完成

//创建表格节点

var oTabNode=document.createElement(table);

//创建tBody节点

var oTbdNode=document.createElement(tbody);

//创建行节点

var oTrNdoe=document.createElement(tr);

//创建单元格节点

var oTdNode=document.createElement(td);

oTdNoe.innerHTML=只是单元格

//现在这些节点之间还没有关系,要让这些节点之间有关系,需进行指定层次的节点添加

oTrNode.appendChild(oTdNode);

oTbdNode.appendChild(oTrNode);

oTabNode.appendChild(OTbdNode);

//由于是将table放到div节点里面,所以先获取div节点

document.getElementsByTagName(div)[0].appendChild(oTabNode);

 

}

</script>

 

//上面的方法过于繁琐,既然操作的是表格,那么最方便的方式就是使用表格节点对象的方法来完成,表格由行组成,表格节点对象中insertRow方法就完成了创建行并添加的动作

然后通过tr节点对象的insertCell来完成

function crtTable()

{

var tTabNode=document.createElement(table);

tTabNode.id=tabid;

//或者tTabNode.setAttribute(id,tabid);

for(var x=1;x<=5;x++)

{

var oTrNode=tTabNode.insertRow();

for(var y=1;y<=6;y++)

{

var oTdNdoe=oTrNode.insertCell();

oTdNode.innerHTML=这是新的单元格

}

}

document.getElementsByTagName(div)[0].appendChild(oTabNode);

//为了使这个表格只能创建一次,所以按钮点击一次之后就让他不可用

document.getElementsByName(crtBut)[0].disabled=true;

 

}

 

 

 

现在就要动态创建了,弄个文本框,让用户自己选择要创建的表格的行数和列数

弄两个文本框

行:<input type=text name=rownum/>

列:<input type=text name=colnum/>

 

 

var rowVal=parseInt(document.getElementsByName(rownum)[0].value);

var colVal=parseInt(document.getElementsByName(colnum)[0].value);

 

现在想要动态删除指定的行或者列

创建两个文本框,输入要删除的行数和列数

<input type=text name=delrow/><input type=button value=删除行 onclick=delRow()/>

<input  type=text name=delcol/><input type=button value=删除列 onclick=delCol()/>

 

function delRow()

{

//先获取表格对象

var oTabNode=documnet.getElementById(tabid);

if(!oTabNode)//非空

{

//获取要删除的表格的行数

var rowVal=document.getElementByName(delrow)[0].value;

ifrowVal>=1&&rowVal<=oTabNode.rows.length

{

tTabNode.deleteRow(rowVal-1);//注意角标减一

}

else

{

alert(要删除的行不存在)

}

 

}

else

{

alert(表格不存在);

return;

}

}

 

//删除列,其实就是删除每一行中同一位置的单元格

function delCol()

{

Var oTabNode=document.getElementById(tabid);

if(oTabNode==null)

{

alert(表格不存在)

return

}

var colVal=document.getElementsByName(delcol)[0].value;

if(colVal>=1&&colVal<=tTabNode.rows[0].cells.length)

{

for(val  x=0;x<oTabNode.rows.length;x++)

{

oTabNode.rows[x].deleteCell(colVal-1);

}

}

else

{

alert(要删除的列不存在)

}

}

 

 

 

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值