ES6学习篇二

用面向对象的方法完成选项卡效果,包括切换,添加,删除,编辑

<div class="tab" id="tab">
    <nav class="first">
        <ul>
            <li class="liveactive"><span>测试  </span><i class="icon">x</i></li>
            <li><span>测试2 </span><i class="icon">x</i></li>
            <li><span>测试3 </span> <i class="icon">x</i></li>
        </ul>
        <div class="tabadd">
            <span>+</span>
        </div>
    </nav>
    <div class="tabscon">
        <section class="conactiv">测试1</section>
        <section>测试2</section>
        <section>测试3</section>
    </div>
</div>
<script>
	let that;
	class Tab {
	    constructor (id){
	        that = this;
	        this.main = document.querySelector(id);
	        this.add = this.main.querySelector('.tabadd');
	        this.ul = this.main.querySelector('.first ul:first-child');
	        this.fsetion = this.main.querySelector('.tabscon');
	        this.init();
	    }
	    // 初始化
	    init(){
	        this.updataNode();
	        this.add.onclick = this.addTab;
	        this.lis.forEach((item,i) => {
	            this.lis[i].index = i;
	            this.lis[i].onclick=this.toggleTab;
	            this.remove[i].onclick =this.removeTab;
	            this.spans[i].ondblclick = this.editTab;
	            this.section[i].ondblclick = this.editTab;
	        });
	    }
	    // 更新获取dom
	    updataNode(){
	        this.lis = this.main.querySelectorAll('li');
	        this.section = this.main.querySelectorAll('section'); 
	        this.remove = this.main.querySelectorAll('.icon');
	        this.spans = this.main.querySelectorAll('.first li span');
	    }
	    // 切换
	    toggleTab(){
	        that.clearTab();
	        this.className= 'liveactive';
	        that.section[this.index].className = 'conactiv';
	    }
	    // 删除样式
	    clearTab(){
	        for(let i = 0;i<this.lis.length;i++){
	            this.lis[i].className = '';
	            this.section[i].className  = '';
	        }
	    }
	    // 添加tab
	    addTab(){
	        that.clearTab();
	        var random = Math.random();
	        var li  = '<li class="liveactive"><span>新选项卡  </span><i class="icon">x</i></li>';
	        var section = '<section class="conactiv">测试'+random+'</section>';
	        // insertAdjacentHTML添加dom
	        that.ul.insertAdjacentHTML('beforeend', li);  
	        that.fsetion.insertAdjacentHTML('beforeend',section)
	        that.init();
	    }
	    // 删除
	    removeTab(e){
	        e.stopPropagation(); //冒泡
	        var index = this.parentNode.index;  //parentNode父级
	        console.log(index)
	        that.lis[index].remove();
	        that.section[index].remove();
	        that.init();
	        if(document.querySelector('.liveactive')) return;  // 如果有这个类名就返回
	        index--;
	        that.lis[index]&&that.lis[index].click();
	    }
	    // 编辑
	    editTab(){
	        var str = this.innerHTML;
	        window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); //取消双击选中效果
	        this.innerHTML = '<input type="text">';
	        var input  = this.children[0]; // children返回元素的集合
	        input.value = str;
	        input.select(); //select选中效果
	        input.onblur = function(){
	            this.parentNode.innerHTML = this.value;
	        }
	        input.onkeyup = function(e){
	            if(e.keyCode == 13){
	                this.blur();
	            }
	        }
	    }
	};
	new Tab('#tab');
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值