抽象对象:Tab对象
-
该对象具有切换功能
-
该对象具有添加功能
-
该对象具有删除功能
-
该对象具有修改功能
4.切换功能实现
首先把大家可以先看看html结构,防止获取元素和类名的时候不知道获取的是什么:
Js 面向对象 动态添加标签页
- 测试1
- 测试2
- 测试3
+
测试1 测试2 测试3 在这一节里我们要实现的效果:
示例代码:
var that;
class tab{
constructor(id){
//获取元素
that = this;
this.main = document.querySelector(id);
this.lis = this.main.querySelectorAll(‘li’);
this.sections = this.main.querySelectorAll(‘section’);
this.init();//自动调用init
}
init(){
//init初始化操作让相关元素绑定事件
for(let i = 0;i<this.lis.length;i++){
this.lis[i].setAttribute(‘index’,i);//设置索引值
this.lis[i].onclick = this.toggleTab;
}
}
toggleTab() {
//clearClass函数是类的公共函数,所有只能通过that调用
that.clearClass();
this.className = ‘liactive’;
that.sections[this.getAttribute(‘index’)].className = ‘conactive’;
}
clearClass() {
for(var i = 0;i<this.lis.length;i++) {
this.lis[i].className = ‘’;
this.sections[i].className = ‘’;
}
}
}
var newtab = new tab(‘.tabsbox’);
在construcotr里我们要获取相关元素,这里一定要注意this的问题,必须要加this,因为this指向的就是实例化对象。在获取元素后调用init函数,init函数就是用来给元素绑定事件的,比如在页面刷新时tab栏就有了切换添加这些功能,所以要把init函数放在construcotr里。设置索引值是为了在点击tab栏的时候,底下的内容区域也可能够同样变化。
注意:toggleTab()里调用clearClass时是that,而不是this。因为this指向的是调用函数的人,这里指的是li,因为在点击了li时才会调用切换函数。但是li里面没有clearClass方法,所以应该用that,that在这里指向的是实例化对象
5.添加功能实现
1.点击+可以实现添加新的选项卡和内容
2.第一步:创建新的选项卡li和新的内容section
3.第二步:把创建的两个元素追加到对应的父元素中.
4.利用insertAdjacentHTML()可以直接把字符串格式元素添加到父元素中
这里简单介绍一下insertAdjacentHTML()的语法:
position是相对于元素的位置,并且必须是以下字符串之一:
‘beforebegin’ 元素自身的前面。
‘afterbegin’ 插入元素内部的第一个子节点之前。
‘beforeend’ 插入元素内部的最后-个子节点之后。
‘afterend’ 元素自身的后面。
text是要被解析为HTML或XML,并插入到DOM树中的字符串。
首先我们在construcor里面获取元素:
this.add = this.main.querySelector(‘.tabadd’);
this.ul = this.main.querySelector(‘.fisrstnav ul’);
this.fsection = this.main.querySelector(‘.tabscon’);
然后在init初始化函数里给添加按钮绑定事件:
this.add.onclick = this.addTab;
最后创建添加函数addTab():
addTab() {
that.clearClass();
var random = Math.random();
var li = ‘
- 新选项卡
- ’;
var section = ‘
测试’+ random +‘ ’;that.ul.insertAdjacentHTML(‘beforeend’,li);
that.fsection.insertAdjacentHTML(‘beforeend’,section);
}
在添加函数的开头,要先调用clearClass清除原先的样式,让新添加的选项卡为选中状态,我们先看一下效果:
为什么新添加的选项卡不能切换,并且以前的li和section没有清除掉类,这是为什么呢?
因为这是我们后来添加的,我们在获取元素的时候是页面加载的时候,后来添加的也就没有被获取元素,所以也就没有绑定点击事件,就会有这些bug。
所以我们应该在点击加号按钮之后,应该重新获取一下所有的li和section,那么我们新建一个更新函数updateNode(),把construcotr里面获取li和section的部分放进去,当我们每次点击添加按钮的时候都再获取一次所有li和section这样bug就解决了
updateNode() {
this.lis = this.main.querySelectorAll(‘li’);
this.sections = this.main.querySelectorAll(‘section’);
}
并且在init开头加上这一句:
this.updateNode();
再在addTab最后加上这句:
that.init();
这样我们每次添加一个新的选项卡和内容时,都会重新获取并且给新添加的绑定事件。
实现效果:
6.删除功能实现
-
点击x号可以删除当前的Ii选项卡和当前的section
-
x号是没有索引号的,但是它的父亲li有索引号,这个索引号正是我们想要的索引号
-
所以核心思路是:点击x号可以删除这个索引号对应的Ii和section
首先我们要获取所有的关闭按钮,那我们应该把获取元素的操作放在construcor里还是updateNode里面呢?
事实上我们必须把获取关闭按钮的步骤放在updateNode里,因为li和关闭按钮是一一对应的,当新添加一个选项卡时,关闭按钮的数量也需要更新
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
片转存中…(img-kP9kPfZX-1715138839318)][外链图片转存中…(img-5S7khRyv-1715138839318)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
-