js#原生#編輯導航欄案例

在這裏插入圖片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
		 
	 
		 <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
		 <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
		<style>
			#tabComponent{
				border: 1px solid red;
				width: 400px;
				height: 300px;
				margin: auto;
				padding: 10px;
				position: relative;
				 
				 
			}
			.content{
				height: 100%;
			}
			
			.content section{
				width: 100%;
				height: 100%;
				 
			}
			.hidden {
				display: none;
			}
			.rightAdd{
				position: absolute;
				right:0;
				top:12px
			}
		</style>
	</head>

	<body>
		<div id='tabComponent'>
			<ul class="nav nav-pills">
			  <li role="presentation" class="active"><a href="#">Home</a></li>
			  <li role="presentation"><a href="#">Profile</a></li>
			  <li role="presentation"><a href="#">Messages</a></li>
			</ul>
			<div class='rightAdd'><button>+</button></div>
			
			<div class="content">
				<section>1 hello </section>
				<section  class="hidden">2 good</section>
				<section class="hidden">3 ample</section>
			</div>
			
		</div>
		
		
		 
	</body>
	
	<script type="text/javascript">
		var that = null;
		class Tab{
			 
			init() {
				window.self = this;
				this.content = this.main.querySelectorAll('section')
				this.list = this.main.querySelectorAll('li')
				 
				//初始化操作
				for(var i=0;i<this.list.length;++i) {
					this.list[i].index = i;
					this.list[i].onclick=this.toggleTab;
					this.list[i].ondblclick = this.removeTab;
				}
				this.btnAdd.onclick = this.addTab;
				this.binddoubleClick()
				
			}
			constructor(pos) {
			    this.main = document.querySelector(pos)
				this.list = this.main.querySelectorAll('li')
				this.ul   = this.main.querySelector('ul')
				this.content = this.main.querySelectorAll('section')
				this.btnAdd = document.querySelector('.rightAdd')
				//this 指向這個對象,不是 window
				
				that = this;
				this.init()
				
			}
			//切換
			toggleTab() {
				// console.log(this.index)
				for(var i=0;i<window.self.list.length;++i) {
					 
					self.list[i].className = ''
				}
				this.className = 'active'
				for(var i = 0;i<window.self.content.length;++i) {
					self.content[i].className = 'hidden'
					 
				}
				self.content[this.index].className = ''
			}
			//添加
			addTab() {
				console.log('ss')
				let li = '<li role="presentation"><a href="#">編輯</a></li>'
				
				that.ul.insertAdjacentHTML('beforeend',li)
				 
				that.main.querySelector('.content').insertAdjacentHTML('beforeend','<section class="hidden">'+ Math.ceil(Math.random()*100)+'</section>')
				console.log(that.content)
				that.init();
			}
			//移除
			removeTab(e) {
				 
				let index = this.index;
				console.log(index)
				
				that.list[index].remove()
				that.content[index].remove()
				that.updateNode()
				that.init()
			}
			
			editTab() {
				let v = this.innerHTML
				// this.innerHTML = '<input type = "text" />'
				this.innerHTML = "<textarea>"+v+"</textarea>"
				let textarea = this.children[0]
				textarea.onblur = function() {
					// console.log('sfsjk')
					this.parentNode.innerHTML = this.value;
				}
				textarea.onkeyup = function(e) {
					if(e.keyCode === 13) {
						textarea.blur()
					}
				}
				
			}
			updateNode() {
				this.list = this.main.querySelector('li')
				this.content = this.main.querySelector('section')
			}
			binddoubleClick() {
				let arr = that.content;
				for(let i = 0;i<arr.length;++i) {
					arr[i].ondblclick = that.editTab
				}
			}
			
			
			
			
			
			
		}
		var tab = new Tab('#tabComponent')
	</script>
	 

</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章