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 相关文章推荐
使用jQuery模板来展现json数据的代码
Oct 22 Javascript
javascript使用location.search的示例
Nov 05 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
Apr 03 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
Jun 03 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
Apr 26 Javascript
基于Node.js的WebSocket通信实现
Mar 11 Javascript
vue component组件使用方法详解
Jul 14 Javascript
windows下更新npm和node的方法
Nov 30 Javascript
微信小程序实现保存图片到相册功能
Nov 30 Javascript
vue+elementUI实现表格关键字筛选高亮
Oct 26 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
Sep 23 Javascript
taro小程序添加骨架屏的实现代码
Nov 15 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 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
php简单统计中文个数的方法
2016/09/30 PHP
使用js+jquery实现无限极联动
2013/05/23 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
详解VUE中v-bind的基本用法
2017/07/13 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
小程序转发探索示例
2019/02/19 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
2019/10/31 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
python获取当前计算机cpu数量的方法
2015/04/18 Python
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
keras自动编码器实现系列之卷积自动编码器操作
2020/07/03 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
公司离职证明标准格式
2014/11/18 职场文书
2014年班务工作总结
2014/12/02 职场文书
仰望星空观后感
2015/06/10 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书