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 相关文章推荐
json2.js的初步学习与了解
Oct 06 Javascript
jQuery Ajax请求状态管理器打包
May 03 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
Mar 09 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
AJAX和jQuery动态加载数据的实现方法
Dec 05 Javascript
jquery实现tab键进行选择后enter键触发click行为
Mar 29 jQuery
将input框中输入内容显示在相应的div中【三种方法可选】
May 08 Javascript
JS监听事件的叠加和移除功能
Nov 19 Javascript
解决Layui中templet中a的onclick参数传递的问题
Sep 20 Javascript
javaScript把其它类型转换为Number类型
Oct 13 Javascript
使用axios请求接口,几种content-type的区别详解
Oct 29 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 文件上传全攻略
2010/04/28 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
yii数据库的查询方法
2015/12/28 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
python实现simhash算法实例
2014/04/25 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
python简单区块链模拟详解
2019/07/03 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
Python使用jupyter notebook查看ipynb文件过程解析
2020/06/02 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
Myholidays美国:在线旅游网站
2019/08/16 全球购物
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
do you have any Best Practice for testing
2016/06/04 面试题
小学教育毕业生自荐信
2013/11/18 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
Django模型层实现多表关系创建和多表操作
2021/07/21 Python