正在回答 回答被采纳积分+1
5回答
好帮手慕慕子
2020-08-17 19:17:56
同学你好,作业是没有源码的。因为代码很灵活,实现方式不唯一。我们鼓励大家按照自己的思路去做一做,培养自己的思维能力和编码能力。
老师这里给同学提供一个参考实现的思路:
1、html结构中原生下拉框中添加对应的value和type属性,方便分类。
2、获取原生的option元素,然后根据元素的value和type属性以及文本内容,生成数据。
3、根据生成的数据动态创建下拉列表,下拉列表内容需要全部显示出来,所以不推荐使用select下拉框实现。直接使用div实现效果即可
代码运行结果如下:
示例代码如下,同学可以测试理解下
<!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>
祝学习愉快~
4.Vue与React高级框架开发
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星