JS仿QQ好友列表展开、收缩功能(第二篇)


Posted in Javascript onJuly 07, 2017

在上篇的基础上继续完善,点击一个li元素,其他li元素上的类名清除掉。

效果图如下所示:

JS仿QQ好友列表展开、收缩功能(第二篇)

js:

<script>
 window.onload = function(){ 
 var list = document.getElementById('list'); 
 var ah2 = list.getElementsByTagName('h2'); 
 var uls = list.getElementsByTagName('ul');
 var lis = null;//用于下面的存储
 var arrli = [];//
 // h2要和下面的ul进行匹配,所以我们要用索引值,给h2身上添加索引值
 for(var i=0;i<ah2.length;i++){ 
 ah2[i].index = i;//给h2添加索引值,点击谁就给谁添加索引值
 ah2[i].onclick = function(){
 if(this.className == ''){//判断所点击的h2标签是否有类,
  //this.index指h2身上的索引数,this指h2,h2的索引值为this.index
  uls[this.index].style.display = 'block'; 
  this.className = 'active';//给当前点击的h2添加类,更改箭头方向
 }else{
  uls[this.index].style.display = 'none';
  this.className = '';
 }
 }
 }
 // 找到list里的所有ul,共有三个ul,所以用到for循环
 for(var i=0;i<uls.length;i++){//找到每一组ul
 lis = uls[i].getElementsByTagName('li');//找到uls中的所有li元素,存入到lis中,为什么要存一下呢?因为找到的li元素是一组元素的集合,要给每一个元素添加点击事件,存起来之后要再来一次for循环,for套for中间没有函数包着所以得换一个变量
 for(var j=0;j<lis.length;j++){//找到每组ul中的所有li
 arrli.push(lis[j]); //把每个li放到数组中,因为是要操作一组li中的每个,所以我们把它拎出来放在一起方便操作
 }
 }
 // 找到每个li之后进行点击事件操作
 for(var i=0;i<arrli.length;i++){
 arrli[i].onclick = function(){
 // 清除所有类名,只给当前点击的添加
 // 只保留一个li元素添加类名
 // 为什么用的是i呢?因为for套for它们中间有一层函数隔开(有函数包含的情况下作用域发生了改变),所以可以使用同样的i名称
 for(var i=0;i<arrli.length;i++){
  arrli[i].className = '';//去掉点击所有添加的类
 }
 this.className = 'hover';//给当前点击的li元素添加类名
 }
 }
 }
</script>

注意:

怎么区分for循环中有的用 i 有的用 j?

答:①如果是一个for循环,那么用 i 或者 j 哪个都行,一般是用 i .
②如果是两个for嵌套,那么看两个for中间有没有函数隔开:1.有函数隔开,那么这两个for循环中的变量都可以用 i 。2.没有函数隔开,那么这两个for循环中的变量不能使用相同的 i 来命名,一个 i ,一个 j .

例一:

下面是两个嵌套的for循环中没有函数隔开,所以一个是 i ,一个是 j .

for(var i=0;i<uls.length;i++){//找到每一组ul
 lis = uls[i].getElementsByTagName('li');
 for(var j=0;j<lis.length;j++){//找到每组ul中的所有li
 arrli.push(lis[j]); 
 }
}

例二:

也是两个嵌套的for循环中,有一个函数隔开,那么就可以使用同一个 i 来命名。

for(var i=0;i<arrli.length;i++){
 arrli[i].onclick = function(){ 
 for(var i=0;i<arrli.length;i++){
 arrli[i].className = '';//去掉点击所有添加的类
 }
 this.className = 'hover';//给当前点击的li元素添加类名
 }
}

以上所述是小编给大家介绍的JS仿QQ好友列表展开、收缩功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS 动态获取节点代码innerHTML分析 [IE,FF]
Nov 30 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
Js中的onblur和onfocus事件应用介绍
Aug 27 Javascript
js使下拉列表框可编辑不止是选择
Dec 12 Javascript
jquery实现的鼠标下拉滚动置顶效果
Jul 24 Javascript
jQuery中:first选择器用法实例
Dec 30 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
jquery超简单实现手风琴效果的方法
Jun 05 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
Feb 24 Javascript
jQuery展示表格点击变色、全选、删除
Jan 05 Javascript
微信小程序 swiper制作tab切换实现附源码
Jan 21 Javascript
详解Vue项目部署遇到的问题及解决方案
Jan 11 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
Jul 07 #Javascript
详解vue.js+UEditor集成 [前后端分离项目]
Jul 07 #Javascript
JS实现搜索关键词的智能提示功能
Jul 07 #Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 #Javascript
javascript ES6 新增了let命令使用介绍
Jul 07 #Javascript
微信小程序之绑定点击事件实例详解
Jul 07 #Javascript
分享19个JavaScript 有用的简写写法
Jul 07 #Javascript
You might like
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
PHP 读取文件的正确方法
2009/04/29 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
php 的反射详解及示例代码
2016/08/25 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
[48:53]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第一场
2014/05/26 DOTA
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
Python的类实例属性访问规则探讨
2015/01/30 Python
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
python开发之for循环操作实例详解
2015/11/12 Python
pandas的object对象转时间对象的方法
2018/04/11 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
python找出完数的方法
2018/11/12 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
全球知名鞋履品牌授权零售商:Journeys
2016/09/17 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
中药学专业求职信
2014/05/31 职场文书
小学校长汇报材料
2014/08/20 职场文书
幼儿园开学报名通知
2015/07/16 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL