DOM展开闭合列表:
overflow 属性规定当内容溢出元素框时发生的事情。
auto,hidden,inherit,scroll,visible
1.标签封装数据
2.定义样式,css
3.明确事件源和事件,以及要处理的节点,dom
但是上面那样写太烂了,应该尽可能的降低耦合性
在多个列表下,一次只能展开一个,余下关闭
1.获取所有dl节点,只对当前节点进行展开操作,余下关闭
示例 — 好友菜单
overflow 属性规定当内容溢出元素框时发生的事情。
auto,hidden,inherit,scroll,visible
1.标签封装数据
2.定义样式,css
3.明确事件源和事件,以及要处理的节点,dom
4.明确具体操作方式(事件的处理内容),js
<head lang="en">
<meta charset="UTF-8">
<style type="text/css">
dl dd{ /*<dd>标签本来带着缩进功能,取消 */
margin: 0px;
}
dl{
height: 16px;
overflow: hidden;
}
</style>
</head>
<body>
<script type="text/javascript" >
//列表展开闭合
var flag = true;
function list(){
//1.将dl的overflow的属性改为visible
var odlNode = document.getElementsByTagName("dl")[0];//获取dl节点
//odlNode.style.overflow = "visible";这样点一下,展开,但是再也收不回去
if(flag){
odlNode.style.overflow = "visible";
flag = false;
}else{
odlNode.style.overflow = "hidden";
flag = true;
}
}
</script>
<dl>
<dt οnclick="list()">菜单如下</dt>
<dd>A菜单</dd>
<dd>B菜单</dd>
<dd>C菜单</dd>
<dd>D菜单</dd>
</dl>
</body>
</html>
但是上面那样写太烂了,应该尽可能的降低耦合性
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
dl dd{ /*<dd>标签本来带着缩进功能,取消 */
margin: 0px;
}
dl{
height: 16px;/*设置高度就是一个字的高度*/
}
/*预定义类选择器,便于给标签进行样式的动态加载*/
.open{
overflow: visible;
}
.close{
overflow: hidden;
}
</style>
</head>
<body>
<script type="text/javascript" >
//重定义list,降低js和css的耦合性
/* function list(){
var odlNode = document.getElementsByTagName("dl")[0];//获取dl节点
//odlNode.className ="open";
if(odlNode.className=="close"){
odlNode.className="open";
}else{
odlNode.className="close";
}
}//这中方式一旦列多了就不好用了*/
function list(node){
//alert(node.nodeName);
var odlNode = node.parentNode;//当前操作的节点对象
if(odlNode.className=="close"){
odlNode.className="open";
}else{
odlNode.className="close";
}
}
</script>
<dl class="close">
<dt οnclick="list(this)">一菜单如下</dt>
<dd><a href="http://www.baidu.com">A菜单1</a></dd>
<dd>B菜单1</dd>
<dd>C菜单1</dd>
<dd>D菜单1</dd>
</dl>
<dl class="close">
<dt οnclick="list(this)">二菜单如下</dt>
<dd>A菜单2</dd>
<dd>B菜单2</dd>
<dd>C菜单2</dd>
<dd>D菜单2</dd>
</dl>
<dl class="close">
<dt οnclick="list(this)">三菜单如下</dt>
<dd>A菜单3</dd>
<dd>B菜单3</dd>
<dd>C菜单3</dd>
<dd>D菜单3</dd>
</dl>
</body>
</html>
//visible展开列表,并没有将余下页面中的内容挤下去,而是重叠在一起
在多个列表下,一次只能展开一个,余下关闭
1.获取所有dl节点,只对当前节点进行展开操作,余下关闭
<html>
<head lang="en">
<meta charset="UTF-8">
<style type="text/css">
dl dd{ /*<dd>标签本来带着缩进功能,取消 */
margin: 0px;
}
dl{
height: 16px;/*设置高度就是一个字的高度*/
}
/*预定义类选择器,便于给标签进行样式的动态加载*/
.open{ overflow: visible; }
.close{ overflow: hidden; }
</style>
</head>
<body>
<script type="text/javascript" >
function list(node){
var ocurrentDlNode = node.parentNode;
var odlNodes = document.getElementsByTagName("dl");
for(var i = 0;i<odlNodes.length;i++){
odlNodes[i]==ocurrentDlNode?
(ocurrentDlNode.className=="close"?ocurrentDlNode.className="open":
ocurrentDlNode.className="close"):(odlNodes[i].className="close");
/* if(odlNodes[i]==ocurrentDlNode){
ocurrentDlNode.className=="close"?ocurrentDlNode.className="open":
ocurrentDlNode.className="close";
}else{
odlNodes[i].className="close";
}*/
}
}
</script>
<dl class="close">
<dt οnclick="list(this)">一菜单如下</dt>
<dd><a href="http://www.baidu.com">A菜单1</a></dd>
<dd>B菜单1</dd>
<dd>C菜单1</dd>
<dd>D菜单1</dd>
</dl>
<dl class="close">
<dt οnclick="list(this)">二菜单如下</dt>
<dd>A菜单2</dd>
<dd>B菜单2</dd>
<dd>C菜单2</dd>
<dd>D菜单2</dd>
</dl>
<dl class="close">
<dt οnclick="list(this)">三菜单如下</dt>
<dd>A菜单3</dd>
<dd>B菜单3</dd>
<dd>C菜单3</dd>
<dd>D菜单3</dd>
</dl>
</body>
</html>
示例 — 好友菜单
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
/*把表格中的ul进行样式定义
1.去除无序列表的样式
2.取消外边距
*/
table ul {
list-style: none;
margin: 0px;
background-color:#26E356;
display: none;/*是否显示*/
/*border: #FF0000 1px solid;查看不同浏览器是否会有缩进*/
padding:0px;/*设置li内边距*/
}
/*对表格框线进行定义
对单元格的框线进行定义
*/
table{
border: #0000FF 1px solid ;
width: 100px;
}
table td{
border: #0000FF 1px solid ;
background-color: #F0FF0F;
}
table td a:hover{
color: #FF0000;
}
/*单元格中的超链接样式*/
table td a:link,table td a:visited{
color: #0000FF;
text-decoration: none;/*去下划线*/
}
/*预定义一些样式*/
.open{
display: block;
}
.close{
display: none;
}
</style>
</head>
<body>
<!--
完成一个有展开闭合效果的好友菜单
一次只打开一个
-->
<script type="text/javascript">
function list(node){
//因为浏览器解析方式不同,所以尽量拿父节点
var oTdNode = node.parentNode;
var oUlNode = oTdNode.getElementsByTagName("ul")[0];
//alert(oUlNode.nodeName);
var oTabNode = document.getElementById("goodlist");
// alert(oTabNode);
var colloulNodes = oTabNode.getElementsByTagName("ul");
// alert(oulNodes.length);
for(var i = 0;i<colloulNodes.length;i++){
if(colloulNodes[i] == oUlNode){
if(oUlNode.className=="open"){
oUlNode.className="close";
}else{
oUlNode.className="open";
}
}else{
colloulNodes[i].className="close";
}
}
}
</script>
<table id="goodlist">
<tr>
<td>
<a href="javascript:void(0)" οnclick="list(this)">好友列表</a>
<ul class="close">
<li>好友1</li>
<li>好友2</li>
<li>好友3</li>
<li>好友4</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="javascript:void(0)" οnclick="list(this)">好友列表</a>
<ul >
<li>好友1</li>
<li>好友2</li>
<li>好友3</li>
<li>好友4</li>
</ul>
</td>
</tr>
<tr>
<td>
<a href="javascript:void(0)" οnclick="list(this)">好友列表</a>
<ul>
<li>好友1</li>
<li>好友2</li>
<li>好友3</li>
<li>好友4</li>
</ul>
</td>
</tr>
</table>
</body>
</html>