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 function定义函数使用心得
Apr 15 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
Jul 21 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
Nov 23 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 Javascript
学习使用jQuery表单验证插件和日历插件
Feb 13 Javascript
分享一道关于闭包、bind和this的面试题
Feb 20 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
bootstrap daterangepicker汉化以及扩展功能
Jun 15 Javascript
深入理解Vue keep-alive及实践总结
Aug 21 Javascript
vue解决使用$http获取数据时报错的问题
Oct 30 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
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
开启PHP的伪静态模式
2015/12/31 PHP
实例讲解php实现多线程
2019/01/27 PHP
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
javascript学习之json入门
2016/12/22 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[03:56]还原FTP电影首映式 DOTA2群星拼出遗迹世界
2014/03/26 DOTA
python选择排序算法实例总结
2015/07/01 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
python实现自动解数独小程序
2019/01/21 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
opencv实现图像平移效果
2021/03/24 Python
教师党员公开承诺书
2014/03/25 职场文书
志愿者活动总结
2014/04/28 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
公司股份转让协议书范本
2015/01/28 职场文书
银行自荐信范文
2015/03/25 职场文书
班主任培训研修日志
2015/11/13 职场文书