You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					99 lines
				
				3.9 KiB
			
		
		
			
		
	
	
					99 lines
				
				3.9 KiB
			| 
											3 years ago
										 | <!DOCTYPE html> | ||
|  | <html lang="en"> | ||
|  | <head> | ||
|  |   <meta charset="UTF-8"> | ||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
|  |   <meta http-equiv="X-UA-Compatible" content="ie=edge"> | ||
|  |   <title>Document</title> | ||
|  | </head> | ||
|  | <body> | ||
|  |   <!-- 生成的dom结构 --> | ||
|  |   <div id="demo"> | ||
|  |     <!-- 添加内容 --> | ||
|  |   </div> | ||
|  |   <!-- 原生 --> | ||
|  |   <div> | ||
|  |     <div class="title">原生select</div> | ||
|  |     <select> | ||
|  |       <option value="1" type="构建工具">Babel</option> | ||
|  |       <option value="2" type="构建工具">Webpack</option> | ||
|  |       <option value="3" type="构建工具">Rollup</option> | ||
|  |       <option value="4" type="前端框架">Vue</option> | ||
|  |       <option value="5" type="前端框架">Angular</option> | ||
|  |       <option value="6" type="前端框架">React</option> | ||
|  |       <option value="7" type="前端框架">Nerv</option> | ||
|  |     </select> | ||
|  |   </div> | ||
|  |   <script> | ||
|  |     // 用于存放分类后的结果 | ||
|  |     let classify = {}; | ||
|  |     // 获取所有的option选项 | ||
|  |     let allOption = document.querySelectorAll('option') | ||
|  |     // 遍历所有的选项, | ||
|  |     for (let i = 0; i < allOption.length; i++) { | ||
|  |       // 获取每一个option选项的type属性值 | ||
|  |       const type = allOption[i].getAttribute('type'); | ||
|  |       // 获取每一个option选项的value属性值 | ||
|  |       const value = allOption[i].getAttribute('value'); | ||
|  |       // 获取每一个option选项的文本内容 | ||
|  |       const text = allOption[i].innerText | ||
|  |       //  判断是否存在该类型 不存在则置为空数组,然后才可以将同类型的数据添加进去 | ||
|  |       if (!classify[type]) { | ||
|  |         classify[type] = []; | ||
|  |       } | ||
|  |       // 将每一项放入对应类型的数组 | ||
|  |       /** | ||
|  |        * 因为每循环一次,没有option选项都有对应的type和值,示例: | ||
|  |        * 第一次循环 type = "构建工具" value ="1" text = "Babel" 那么就是 classify["构建工具"] = [{value:1,text:'Babel'}] | ||
|  |        * 第二次循环 type = "构建工具" value ="2" text = "Webpack" 那么就是 classify["构建工具"] = [{value:1,text:'Babel'},{value:2,text:'Webpack'}] | ||
|  |        * .....依次类推 | ||
|  |        * 最后一次循环 type = "前端框架" value ="7" text = "Nerv" 那么就是 classify["前端框架"] = [ {value: "前端框架", text: "Vue"}, | ||
|  |        * {value: "前端框架", text: "Angular"}, | ||
|  |        * {value: "前端框架", text: "React"}, | ||
|  |        * {value: "前端框架", text: "Nerv"}] | ||
|  |        */ | ||
|  |       classify[type].push({ | ||
|  |         value, | ||
|  |         text | ||
|  |       }) | ||
|  |     } | ||
|  |     console.log(classify) | ||
|  |     // 动态创建下拉列表 | ||
|  |     function createElement(classify) { | ||
|  |       // 获取最外层的容器 | ||
|  |       let wrap = document.getElementById('demo') | ||
|  |       // 先设置内容,添加input输入框 | ||
|  |       wrap.innerHTML = "<input type'text'>" | ||
|  |       // 遍历生成的数据 | ||
|  |       for (let [key, value] of Object.entries(classify)) { | ||
|  |         /** | ||
|  |          * key表示分类即: 构建工具 和前端框架 | ||
|  |          * value是分类下对应的数组 | ||
|  |          * 可以打印查看效果 | ||
|  |          */ | ||
|  |         // console.log('key', key) | ||
|  |         // console.log('value', value) | ||
|  |         // 定义字符串,默认内容是分类名称 | ||
|  |         let items = `<div class="name">${key}</div>` | ||
|  |         // 遍历数组 | ||
|  |         value.forEach(item => { | ||
|  |           // 生成每一条内容 | ||
|  |           // console.log(item.value, item.text) | ||
|  |           let lis = `<div  value="${item.value}">${item.text}</div>` | ||
|  |           // 拼接字符串 | ||
|  |           items += lis | ||
|  |         }) | ||
|  |         /** | ||
|  |          * items <div class="name">构建工具</div><div  value="1">Babel</div><div  value="2">Webpack</div><div  value="3">Rollup</div> | ||
|  |          * items <div class="name">前端框架</div><div  value="4">Vue</div><div  value="5">Angular</div><div  value="6">React</div><div  value="7">Nerv</div> | ||
|  |          */ | ||
|  |         console.log('items', items) | ||
|  |         // 设置demo盒子的innerHTML的内容 | ||
|  |         wrap.innerHTML += items | ||
|  |       } | ||
|  |     } | ||
|  |     createElement(classify) | ||
|  |   </script> | ||
|  | </body> | ||
|  | </html> |