目录
之前我们用【排他思想】做了一个Tab切换的小案例,那么如果我们的需要不只是只有一个table呢?我们应该怎么做?今天我们就来看一下。
我们先把HTML结构给大家展现出来:
- <div class="tab">
- <div class="nav">
- <a href="javascript:;" class="hover">公司新闻a>
- <a href="javascript:;">公司动态a>
- <a href="javascript:;">行业新闻a>
- div>
-
- <div class="nav_con">
- <div>公司新闻-showdiv>
- <div>公司动态-showdiv>
- <div>行业新闻-showdiv>
- div>
- div>
- <br /><br />
-
- <div class="tab">
- <div class="nav">
- <a href="javascript:;" class="hover">大学a>
- <a href="javascript:;">中学a>
- <a href="javascript:;">小学a>
- div>
-
- <div class="nav_con">
- <div>大学内容div>
- <div>中学内容div>
- <div>小学内容div>
- div>
- div>
-
- <div class="tab">
- <div class="nav">
- <a href="javascript:;" class="hover">大学a>
- <a href="javascript:;">中学a>
- <a href="javascript:;">小学a>
- div>
-
- <div class="nav_con">
- <div>大学内容div>
- <div>中学内容div>
- <div>小学内容div>
- div>
- div>
今天我们用到的方法是事件委派,那么就会涉及到【event.target】和注册事件的新的方式,所以我们先来介绍一下【e.target】以及【注册事件】:
常见事件对象的属性和方法:
e.target返回的是触发事件的对象(元素),我们之前学的 this 返回的是绑定事件的对象(元素),如果在没有冒泡事件的情况下,两者的返回对象是一样的,那么它们的区别是啥呢?
区别:e.target点击了那个元素,就返回那个元素,this哪个元素绑定了这个点击事件,那么就返回谁。
给元素添加事件,称为注册事件或者绑定事件。
注册事件有两种方式:传统方式和方法监听注册方式(今天要介绍的)
铺垫好了,我们来看一下JS:
-
- //获取所有的table
- var tabs = document.querySelectorAll('.tab')
- //给每珍上table绑定事件
- for(var i=0; i
length; i++){ - tabs[i].addEventListener('click',function(e){
- //通过e.target获取所有的a标签和内容区的div
- var as = e.target.parentNode.children
- var nav_cons = e.target.parentNode.nextElementSibling.children
- //【排他思想】因为as和nav_cons的长度相同,所以把两次的样式清除写在一起了
- //且在给a标签清除样式时要给a标签添加属性(index)
- for(var j=0; j<as.length; j++){
- as[j].className = ''
- as[j].setAttribute('index',j)
- nav_cons[j].style.display = 'none'
- }
- //获取索引值
- var index = e.target.getAttribute('index')
- //给当前点击a标签添加样式
- e.target.className = 'hover'
- nav_cons[index].style.display = 'block'
- })
- }
-
每一行代码有什么用,我都备注好了,应该还算详细。我们来看运行一下是什么样的:
先获取所有table的长度,通过循环绑定事件,这样不管我们添加多少个table都不会有影响。今天的内容就这么多了,拜比~