关于页面的二级渲染以及带事件的二级渲染

220 阅读3分钟
#### 关于普通的二级渲染: **1.渲染是我们在写页面时最常见的事,也一个前端开发人员的基本要求。在通过请求后台拿到数据接口后,如何把得到的内容更好的展示到页面上,我在这儿用的事拼接字符串的方式:** 下面假设是我们拿到的返回数据事得到了一个数组形式的数据 ``` [ { title: "特色购物", id: 1, list: [ { name: '苏宁互联', id: 101, }, { name: '苏宁达人', id: 102 } ] }, { title: "主题频道", id: 2, list: [ { name: '电器城', id: 201 }, { name: '苏宁超市', id: 202 } ] } ] 二级数组渲染 ``` 首先分析我们要渲染的形式:假设我要渲染的是一个ul列表,那么我们就要在他的li里渲染好每个li数据: 我们在js文件中先准备一个函数,函数里我们先使用Ajax请求去请求数据,可以这么写: ``` getList() function getList() { $.ajax({ url: '../lib/nav.json', dataType: 'json', success: function (res) { // console.log(res) res就是我们拿到这个数组 // 1. 准备一个 空字符串 let str = '' // 2. 进行拼接 // 2-1. 遍历外层数组, 先把一级标题写上 res.forEach(item => { str += ` <li> <p>${ item.title }</p> <ol> ` // 2-2. 遍历里层数组, 渲染 ol 下面的 li // 里层数组有多少项, 就渲染几个 二级 li 放在这里 item.list.forEach(item2 => { str += `<li>${ item2.name }</li>` }) str += ` </ol> </li> ` }) // 3. 渲染到页面上 $('.box > ul').html(str) } }) } ``` 这样我们就可以直接渲染一个二级数组。 #### 带有事件的二级渲染; **1.那么如何实现在二级渲染的同时给他添加上各种事件呢,其实懂了上面所说的,这里就可以自己尝试了,因为无外乎都是拼接:** 2.首先。我们肯定要提前想好我们要渲染的结构,最好能够把他先写出来,这里我们依旧去渲染一个数组: ``` <div class="header"> <div class="container"> <ul> <li> 1 </li> <span>|</span> <li>2</li> <span>|</span> <li>3</li> <span>|</span> <li>4</li> <span>|</span> <li>5</li> <span>|</span> <li>6</li> <span>|</span> <li>7</li> <span>|</span> <li>8</li> <span>|</span> <li>9</li> <span>|</span> <li>10</li> </ul> <ol> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ol> </div> </div> <div class="nav_top"> <ul> </ul> </div> <div class="nav_box"> <ul class="container"> </ul> </div> ``` 数据大家去准备,像上面那样,自己去写一个数组请求回来就好了: 依旧在js文件中去准备一个函数: ``` getList() function getList() { $.ajax({ url: '../lib/nav_top.json', dataType: 'json', success: function (res) { console.log(res) // 1. 准备一个空字符串 let str = '' // 2. 渲染一级的 li res.forEach(item => { str += `<li>${ item.name }</li>` }) // 3. 填充到 nav_top 里面的 ul 里面 $('.nav_top > ul') .html(str) //添加之后,使用委托事件的方式。这里用了jQuery。 .on({ mouseenter: () => $('.nav_box').stop().slideDown(), mouseleave: () => $('.nav_box').stop().slideUp() }) .children('li') // 找到所有的一级菜单下的 li .on('mouseover', function () { //3-1. 知道自己移入的时哪一个 li const index = $(this).index() // 3-2. 找到要渲染的数组 const list = res[index].list // 3-3. 用我们找到的数组把 nav_box 位置渲染了就可以了 let str = '' // 5-4. 进行组装 list.forEach(item => { str += ` <li> <div> <img src="${ item.list_url }" alt=""> </div> <p class="title">${ item.list_name }</p> <span class="price">${ item.list_price }</span> </li> ` }) // 3-5. 填充到页面里面 $('.nav_box > ul').html(str) }) // 4-4. 给 nav_box 添加一个移入移出事件 $('.nav_box') .on({ mouseover: function () { $(this).finish().show() }, mouseout: function () { $(this).finish().slideUp() } }) } }) } ``` **这样就完成了,如果有更好得想法,或者发现错误的话,欢迎随时联系。**