本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 [署名 4.0 国际 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/deed.zh) 本文作者: 苏洋 创建时间: 2013年12月27日 统计字数: 3651字 阅读时间: 8分钟阅读 本文链接: https://soulteary.com/2013/12/27/javascript-calc-categories.html ----- # Javascript 目录迁移 话说被分配一个任务,把旧版文档目录迁移到新版。用到一些思路,记录一下。 旧版目录结构数据源在 MYSQL, 作为懒人,尽量回避 `mysql connect`, 就直接用 JS 搞吧。 打开旧版本的后台,看了一下dom 结构,把数据先抽出来。 ![2013-12-27_115253](https://attachment.soulteary.com/2013/12/27/2013-12-27_115253.png "2013-12-27_115253") 由于页数不多,手动翻翻页面,把数据保存一下就好。 ```js var topics = $('.article_list tbody tr td:nth-child(2) a'); var data = {}; for (var i = topics.length - 1; i >= 0; i--) { var link = topics[i].getAttribute('href').split('id=')[1]; var text = topics[i].innerText; data[text] = link; console.log('分类名称:', text, '分类ID:', link); }; console.log(JSON.stringify(data)); ``` 把上面的数据保存成一个大数组,接着去重,以及换成_id:value_的形式。 ```js var data = {} for (var i = conv.length - 1; i >= 0; i--) { for (var ii in conv[i]) { data[ii] = conv[i][ii] } } for (var ii in data) { data[data[ii]] = ii delete data[ii]; } console.log(JSON.stringify(data)); ``` 得到数据如下: ```json {"3":" 开发手册","7":" 资费问题","8":"稳定性和数据安全","9":"备案域名和内容审核","10":"其他问 题","11":"技术问题","13":"API","15":"代码部署工具","19":"概况","20":"新手上路","21":"平台介绍","32":"StdLib源代码","37":"SAE图标及素材","39":"限制配额","40":"经典案例","41":" 视频教程","147":"公共资源","150":"讲座及资料","155":"资费业务说明","156":"云豆赠送规则","163":"重 要更新","164":"运行原理","166":"应用管理","177":"加入我们","178":"媒体报道","179":"新浪云计算介 绍","189":"支付操作手册","190":"应用商店1","191":"应 用介绍","192":"MySQL","193":"AppConfig","194":"Counter","195":"Cron","196":"DeferredJob","197":"FetchURL","198":"Image","199":"KVDB","200":"Mail","201":"Memcache","202":"Rank","203":"RDC","204":"Storage","205":"TaskQueue","206":"TmpFS","207":"Web服务器","208":"SAE与标 准LAMP差异","209":"服务总线","210":"XHProf","211":"代码部署问 题","212":"SVN使用教程","213":"Hello World","214":"创建部署应 用","216":" 开发实例","218":"Wrappers","219":"应用体 检","220":"禁用函数和类","224":"中文分词服 务","225":"全文检索服务","226":"地理信息服务","227":"misc","228":"微盘开放接 口","229":"苹果消息推送服务","230":"提交应用","231":"本地开发环 境","232":"应用移植指南","235":"移动云平台介 绍","237":"认证规则","238":"违规应用","239":"反馈奖励","245":"故障补偿规则","250":"用户协议","251":"移动云插件与扩展","253":"移动云平台入 门","259":"移动云模板介绍","260":"扩展 API","262":"移动云最新更新","264":"Socket","267":"服务商店","269":"服务商店介绍","271":"接入服务","272":"移动云介绍与公开课","279":"CDN","280":"AppCan中间件介绍","281":"数据下载中心","289":"快速指引","290":"SAE Python环境","291":"可用服务列表","292":"相关工具","293":"FAQ","301":"服务","304":"Python","306":"扩展服务","307":"Java平台概述","308":"快速入门","309":"运行时环 境","310":"搭建本地环境","311":"使用服务","312":"分布式session","313":"框架支持","314":"查看日志","315":"资源下 载","316":"File Wrap","317":"Eclipse插件","319":"Cron使 用","321":"安全相关","322":"应用仓库","324":"Java FAQ","325":"TmpFS服 务","326":"TaskQueue服务","327":"FetchURL服务","328":"Mail服 务","329":"Storage服务","330":"Memcache服务","331":"KVDB服 务","332":"MySQL服务","333":"PHP常见问题","335":"实名认 证","336":"开发者认证","337":"教育机构认 证","340":"认证服务流程","341":"取消认证规则","342":"新版本地开发环境","343":"MiniSAE","344":"手动安装 MiniSAE","345":"Storage服务说 明","346":"Storage大文件上传","347":"工作原理","348":"签名算法","349":"服务审核及发 布","350":"接 入流程","351":"接入实例","352":"服务接入协议","353":"SDK下载及调试","354":"XML文档定 义","355":"状态码和错误码定义","356":"API规范","357":"创建应用","358":"调试工具","359":"应用打包","360":"Tab应用模版","361":"位置服务模版","362":"微博 插件","363":"语音识别","364":"图片滤镜","365":"子浏览 器","366":"短信发送","367":"定时器","368":"顶栏通知","369":"Utils","370":"短信管 理","371":"屏幕朝向","372":"二维码","373":"API Stdlib源代码","374":"默认war包","375":"js/css 库","376":"分词服务","377":"Channel"} ``` 新的规范中,新目录结构如下: ![2013-12-27_120439](https://attachment.soulteary.com/2013/12/27/2013-12-27_120439.png "2013-12-27_120439") 我们看到,四级目录,其中三级目录开始,容量是两位数,所以要考虑ID容纳空间的问题。 这里可以考虑半手动的方式,就是把目录按照结构输入到一个wordpress分类中,然后在模版中写一句话,把结构打出来。 ```php
``` 外面添加一个容器,一会方便用js来搞成和上面一样的数据结构。 打开wordpress的页面,把这里的结构搞出来。 ![2013-12-27_120848](https://attachment.soulteary.com/2013/12/27/2013-12-27_120848.png "2013-12-27_120848") ```js var data = {}; var base = function(n){ var ret = 1; //因为子目录可能会有两位数的容量,所以设置100 var offset = 100; for(var i=0;i