博主信息
富贵人生
博文
87
粉丝
0
评论
0
访问量
3246
积分:0
P豆:174

【前端】【JavaScript技艺】 如何改善一段代码?

2021年10月12日 16:09:52阅读数:15博客 / 富贵人生

如题: 渴望“手指”们改善代码的思路

例:

便于维护,便于阅读

美观

还有????

附一段DEMO:

           function parser_chapter(option) {var chapter = option.chapter; // 章var section = option.section; // 节var j_sectionHtml = ""; // 节htmlvar z_knowPointHtml = ""; // 知识点htmlfor(var ii = 0; ii < z_chapter[chapter].list.length; ii++) {var j_sectionList = z_chapter[chapter].list[ii];
j_sectionHtml +='<a href="' + j_sectionList.url + '" tetle="' + j_sectionList.name + '" data-id="' + ii + '">' + j_sectionList.name + '</a>';
}
col2.innerHTML = j_sectionHtml; // 节列表for(var iii = 0; iii < z_chapter[chapter].list[section].list.length; iii++) {var z_knowPointList = z_chapter[chapter].list[section].list[iii];
z_knowPointHtml +='<a href="' + z_knowPointList.url + '" title="' + z_knowPointList.name + '" data-h="' + z_knowPointList.url[0] + '" data-s="' + z_knowPointList.url[1] + '">' + z_knowPointList.name + '</a>';
}
col1.innerHTML = z_knowPointHtml; // 知识点列表document.querySelectorAll(".col3 a")[chapter].className = "font_yellow mui-active"; // '章'添加新的 class.document.querySelectorAll(".col2 a")[section].className = "font_yellow mui-active"; // '节'添加新的 class, 因为每次点击会重新渲染'节', 所以无需对兄弟'节' removeClass}

如何 ‘改善’ 上面↑ 的代码 ?

回答

看了一下内容,整个函数是为了解析章节,根据你的注释和代码,以下是个人的愚见:
把功能点细分:

解析部分:
   节点列表,知识点列表,的实现,可以封装成两个函数比如parseSection,parseKonwPoint业务部分:
   单独封装成一个函数,好像就颜色代码风格(也算不上):
   推荐es6语法

下面是我大致帮你整合的代码,不过好像知识点列表有bug,你自己检查一下url

let z_chapter,mui,col1,col2;let parseSection = ({chapter}) => {    let j_sectionHtml = '';    for(let i = 0; i < z_chapter[chapter].list.length; i++) {        let {url,name} = z_chapter[chapter].list[i];
       j_sectionHtml += `<a href="https://segmentfault.com/q/1010000010088212/${url}" title="${name}" data-id="${i}">${name}</a>`;
   }
   col2.innerHTML = j_sectionHtml; // 节列表};let parseKnowPoint = ({chapter,section}) => {    let z_knowPointHtml = '';    for(let i = 0; i < z_chapter[chapter].list[section].list.length; i++) {        let {url,name} = z_chapter[chapter].list[section].list[i];
       z_knowPointHtml += `<a href="https://segmentfault.com/q/1010000010088212/${url}" title="${name}" data-h="${url[0]}" data-s="${url[1]}">${name}</a>`;
   }
   col1.innerHTML = z_knowPointHtml; // 知识点列表}let changeColors = ({chapter,section}) => {    // 业务 : 点击改变字体颜色
   mui.each(mui(".col3 a"), (index, item)  => {
       item.className = "";
   });    document.querySelectorAll(".col3 a")[chapter].className = "font_yellow mui-active"; // '章'添加新的 class.
   document.querySelectorAll(".col2 a")[section].className = "font_yellow mui-active"; // '节'添加新的 class, 因为每次点击会重新渲染'节', 所以无需对兄弟'节' removeClass}let parserChapter = (mui,option) => {
   parserChapter(option);
   parseKnowPoint(option);
   changeColors(option);
}

命名不是太准确,循环变量别用ii这种,用index加前缀,比如bookIdx这种。美观不好弄,生成html这种,本身就不美观了。

本身两个for loop是独立的,用个i就可以了,一般需要的话,QQ靓号转让地图也不会用ii或iii这样定义。

一楼哥们给了ES6的写法,感觉当前阶段还不适合你,可能浏览器的不兼容会让你很困惑。

试试先用用jQuery, 入手会比较快点,而且代码也会比较简单,你这样直接在dom上获取element,进行修改太麻烦了


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论