DOM学习笔记四

DOM展开闭合列表:

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 onclick="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 onclick="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 onclick="list(this)">二菜单如下</dt>
            <dd>A菜单2</dd>
            <dd>B菜单2</dd>
            <dd>C菜单2</dd>
            <dd>D菜单2</dd>
        </dl>
        <dl class="close">
            <dt onclick="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 onclick="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 onclick="list(this)">二菜单如下</dt>
        <dd>A菜单2</dd>
        <dd>B菜单2</dd>
        <dd>C菜单2</dd>
        <dd>D菜单2</dd>
    </dl>
    <dl class="close">
        <dt onclick="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)" onclick="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)" onclick="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)" onclick="list(this)">好友列表</a>
                  <ul>
                      <li>好友1</li>
                      <li>好友2</li>
                      <li>好友3</li>
                      <li>好友4</li>
                  </ul>
              </td>
          </tr>
      </table>
</body>
</html>
时间: 2024-11-10 01:20:55

DOM学习笔记四的相关文章

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

NLTK学习笔记(四):自然语言处理的一些算法研究

自然语言处理中算法设计有两大部分:分而治之 和 转化 思想.一个是将大问题简化为小问题,另一个是将问题抽象化,向向已知转化.前者的例子:归并排序:后者的例子:判断相邻元素是否相同(与排序). 这次总结的自然语言中常用的一些基本算法,算是入个门了. 递归 使用递归速度上会受影响,但是便于理解算法深层嵌套对象.而一些函数式编程语言会将尾递归优化为迭代. 如果要计算n个词有多少种组合方式?按照阶乘定义:n! = n*(n-1)*...*1 def func(wordlist): length = le

Android学习笔记四:添加Source

问题描述 Source not foundThe JAR file D:\.....\sdk\platforms\android-20\android.jar has no source attachment. 问题原因及解决办法 1. 使用SDK Manager下载最新版本的Sources for Android SDK 一般文件下载目录默认在SDK下的sources文件中即 \adt-bundle-windows-x86_64-20130522\sdk\sources\android-20

【Unity 3D】学习笔记四十二:粒子特效

粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起,来模拟火焰,爆炸,水滴,雾气等效果.要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system即可 粒子发射器 粒子发射器是用于设定粒子的发射属性,比如说粒子的大小,数量和速度等.在创建完粒子对象后,在右侧inspector视图中便可以看到所有的粒子属性: emit:是否是使用粒子发射器. min size:粒子最小尺寸. max size:粒子最大尺寸. min energy:粒子的最小生命周期

WEB前端学习笔记 四

接上一篇,web学习笔记 四,在此感谢您对此篇笔记的认可,但转发时请注明文章出自网知博学. 2.0  html的语法格式 html的标签要写在尖括号中 :<> 在在英文输入法状态下,按住shift键然后再按它左侧的尖括号就可了, 先学习一个简单的h1标签,是个标题标签,在html中这样写: <h1>我在h1标签中,我就是标题</h1> 那么h1标签中所包裹的文字,就标记成标题了.通过浏览器的解析后在页面上显示出来的效果就是字体加粗,加黑,和word中的标题性质一样! 大