HTML,JAVASCRIPT代码美化demo
看见别人的博客里面的源码展示十分漂亮,一时兴起,就自己做了个。 当然,网上已经有别人做好的非常完善的codemirror、highlight、prettify。而我在写自己的这个小demo之前呢,也没有做多少参考,按着自己的思路写了一个能简单实现效果的demo。 先上源码:
| 0 | <!DOCTYPE html> | 
| 1 | <html lang="en"> | 
| 2 | <head> | 
| 3 | <meta charset="UTF-8"> | 
| 4 | <title>Document</title> | 
| 5 | <style> | 
| 6 | *{ | 
| 7 | margin: 0; | 
| 8 | padding: 0; | 
| 9 | } | 
| 10 | body{ | 
| 11 | font-family: "微软雅黑"; | 
| 12 | } | 
| 13 | textarea{ | 
| 14 | vertical-align: middle; | 
| 15 | } | 
| 16 | td{ | 
| 17 | height: 24px; | 
| 18 | line-height: 24px; | 
| 19 | } | 
| 20 | </style> | 
| 21 | </head> | 
| 22 | <body> | 
| 23 | <textarea cols="70" rows="15" placeholder="请将HTML和javascript代码粘贴进来,生成table后可以双击进行再次编辑,点击湖区代码即可获取表格代码,请注意请注意请注意请注意请注意请注意请注意请注意请注意----------单双引号内若是包了单个单双引号,着色会出错,可提前删除,生成后再次编辑"></textarea> | 
| 24 | <br> | 
| 25 | <button class="sc">生成</button> | 
| 26 | <button class="zt">获取代码</button> | 
| 27 | <pre> | 
| 28 | <table cellspacing="0" cellpadding="0" style="table-layout:fixed;"> | 
| 29 | </table> | 
| 30 | </pre> | 
| 31 | <script> | 
| 32 | var btn = document.querySelector('.sc'); | 
| 33 | var zt = document.querySelector('.zt'); | 
| 34 | var text = document.querySelector('textarea'); | 
| 35 | var tab = document.querySelector('table'); | 
| 36 | btn.addEventListener('click', function(){ | 
| 37 | if(text.value == ''){ | 
| 38 | alert('请重新输入!'); | 
| 39 | return false; | 
| 40 | } | 
| 41 | var arr = text.value.split(/\n/); | 
| 42 | var htm = '<tr><td contenteditable="false">0</td><td contenteditable="false">'; | 
| 43 | for(var i = 0; i < arr.length; i += 1){ | 
| 44 | var brr = arr[i].replace(/ /g,' '); | 
| 45 | brr = brr.replace(/</g,'<'); | 
| 46 | brr = brr.replace(/>/g,'>'); | 
| 47 | brr = yin(brr);  | 
| 48 | brr = '<code>' + brr + '</code>'; | 
| 49 | if(i == arr.length-1){ | 
| 50 | htm += brr + '</td></tr>'; | 
| 51 | }else{ | 
| 52 | htm += brr + '</td></tr><tr><td contenteditable="false">' + (i+1) + '</td><td contenteditable="false">'; | 
| 53 | } | 
| 54 | } | 
| 55 | tab.innerHTML = htm; | 
| 56 | |
| 57 | go(); | 
| 58 | }) | 
| 59 | |
| 60 | function go(){ | 
| 61 | var td = document.querySelectorAll('td'); | 
| 62 | var tr = document.querySelectorAll('tr'); | 
| 63 | var em = document.querySelectorAll('em'); | 
| 64 | [].forEach.call(td,function(v,i){ | 
| 65 | if(i % 2 == 0){ | 
| 66 | v.style.cssText = "text-align: center;width:24px;font-weight: bold;border-right:2px solid green;word-wrap:break-word;"; | 
| 67 | }else{ | 
| 68 | v.style.cssText = "padding:0 6px;word-wrap:break-word;outline-style:none;"; | 
| 69 | v.addEventListener('click', dbc); | 
| 70 | } | 
| 71 | }); | 
| 72 | [].forEach.call(tr,function(v,i){ | 
| 73 | if(i % 2 == 0){ | 
| 74 | v.style.cssText = "background-color:#f9f9f9;color:#333;" | 
| 75 | }else{ | 
| 76 | v.style.cssText = 'background-color:#ddd;color:#333;' | 
| 77 | } | 
| 78 | }) | 
| 79 | } | 
| 80 | |
| 81 | function dbc(event){ | 
| 82 | clearAll(); | 
| 83 | this.contentEditable = 'true'; | 
| 84 | this.style.color = 'green'; | 
| 85 | event.stopPropagation(); | 
| 86 | } | 
| 87 | |
| 88 | function clearAll(){ | 
| 89 | var td = document.querySelectorAll('td'); | 
| 90 | [].forEach.call(td,function(v,i){ | 
| 91 | v.contentEditable = 'false'; | 
| 92 | if(i % 2 != 0){ | 
| 93 | v.style.color = '#333'; | 
| 94 | } | 
| 95 | }) | 
| 96 | } | 
| 97 | |
| 98 | function yin(str){ | 
| 99 | var arr = str.split('"'); | 
| 100 | if(arr.length > 1){ | 
| 101 | arr.forEach(function(v,i){ | 
| 102 | if(i != arr.length - 1){ | 
| 103 | if(i % 2 == 0){ | 
| 104 | arr[i] = v + '"<em style="color:#369;">'; | 
| 105 | }else{ | 
| 106 | arr[i] = v + '</em>"'; | 
| 107 | } | 
| 108 | } | 
| 109 | }) | 
| 110 | } | 
| 111 | arr = arr.join('').split("'"); | 
| 112 | if(arr.length > 1){ | 
| 113 | arr.forEach(function(v,i){ | 
| 114 | if(i != arr.length - 1){ | 
| 115 | if(i % 2 == 0){ | 
| 116 | arr[i] = v + "'<em style='color:#369;'>"; | 
| 117 | }else{ | 
| 118 | arr[i] = v + "</em>'"; | 
| 119 | } | 
| 120 | } | 
| 121 | }) | 
| 122 | } | 
| 123 | return arr.join(''); | 
| 124 | } | 
| 125 | zt.addEventListener('click', function(){ | 
| 126 | text.value = document.querySelector('pre').innerHTML; | 
| 127 | }); | 
| 128 | document.onclick = function(){ | 
| 129 | clearAll(); | 
| 130 | } | 
| 131 | </script> | 
| 132 | </body> | 
| 133 | </html> | 
上图这些就是这部分代码完成的。 思路比较简单。
1.获取到textarea的value值。
2.我决定采用table完成展示。
3.通过字符串split方法用正则/\n/换行符将每一行提取出来放入数组。
4.数组arr每一项放入一个tr,tr的左边td就是行号++,右边td是内容。
5.由于html标签无法直接在页面中展示,所以在这里我将数组每一项里的html标签转换成了实体名称。
6.最后将表格进行遍历偶数行背景色不一样。
7.点击提取代码,可将表格的html代码设置为texareavalue值。
注意:这个美化代码的demo有一个bug。我希望引号包围的字符串可以颜色与众不同,所以我就又重新以引号分割数组每项,在数组前后添加相应的样式。可以初步实现效果。但这样做有一个问题,当遇到单引号包一个双引号字符串,双引号包一个单引号字符串的时候,是会出现误差的。
所以,我给td添加了contenteditable属性,单机后进入可编辑状态。 当然如果哪位朋友有好的解决方案欢迎留言我们共同探讨。 最后送上代码实例运行地址:点击运行
HTML,JAVASCRIPT代码美化demo的更多相关文章
- JS Nice – JavaScript 代码美化和格式化工具
		JS Nice 是一款让经过混淆处理的 JavaScript 代码可读更好的工具.它使用一种新型的用于 JavaScript 代码美化的去混淆和去压缩引擎.JSNice 采用先进的机器学习和程序分析技 ... 
- javascript代码  调试方法
		你的代码可能包含语法错误,逻辑错误,如果没有调试工具,这些错误比较难于发现. 通常,如果 JavaScript 出现错误,是不会有提示信息,这样你就无法找到代码错误的位置. 在程序代码中寻找错误叫做代 ... 
- JavaScript代码段整理笔记系列(二)
		上篇介绍了15个常用代码段,本篇将把剩余的15个补齐,希望对大家有所帮助!!! 16.检测Shift.Alt.Ctrl键: event.shiftKey; //检测Shift event.altKey ... 
- 博客代码美化(SyntaxHighlighter)
		这篇博文主要讲解自己使用SyntaxHighlighter对代码进行美工中遇见的问题以及如何使用SyntaxHighlighter? 首先来看看SyntaxHighlighter对代码美工的效果吧! ... 
- 编写更加稳定/可读的javascript代码
		每个人都有自己的编程风格,也无可避免的要去感受别人的编程风格--修改别人的代码."修改别人的代码"对于我们来说的一件很痛苦的事情.因为有些代码并不是那么容易阅读.可维护的,让另一个 ... 
- Dirty Markup - 在线代码美化工具
		如果你需要一个帮助你规整书写混乱的代码的工具的话,我强烈推荐给你这个在线代码美化工具 - Dirty Markup.这个在线工具能够帮助你有效的处理HTML/HTML5,CSS和javascript代 ... 
- JSLint JavaScript代码质量审查工具汉化中文版隆重发布
		JSLint是一款JavaScript代码质量审查工具,它可以指出代码中错误.不规范的地方,非常之严格,甚至多写一个空格都会发出警告. JSLint的审查规则,根据众多前辈多年编程经验而写,字字珠玑, ... 
- 文字列表无缝向上滚动JavaScript代码
		<!DOCTYPE html> <html> <head> <meta charset=utf-> <title>文字列表无缝向上滚动Jav ... 
- JavaScript 代码规范
		所有的 JavaScript 项目适用同一种规范. JavaScript 代码规范 代码规范通常包括以下几个方面: 变量和函数的命名规则 空格,缩进,注释的使用规则. 其他常用规范-- 规范的代码可以 ... 
随机推荐
- Qt中各个widget前后位置的设定(在Qt中,所有问题都要一分为二,QWidget体系和QGraphicsWidget体系)
			这两天在总结一些以往project中遇到的问题,正好别组有同事问我关于Qt中各个widget窗口的前后位置是如何定义的,这里就总结一下: 在Qt中,所有问题都要一分为二,讨论两种不同的情况:一个是最常 ... 
- Android NDK 编译FFmpeg(不需要复杂的环境变量设置)
			环境: CentOS6.2——64位 借鉴:https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk 在根目录下创建work文件夹:cd / ... 
- 【转】Python3.x移除了callable内建函数
			原文地址:http://www.cnblogs.com/elvisxu/archive/2010/10/26/1861958.html 最近学习Python的时候,在Python3下跑<Dive ... 
- Dearmweaver CS6 如何添加emmet 插件
			一.关于emmet插件 已经接触前端工具的小伙伴们早听说过这个插件的鼎鼎大名了吧,emmet可以说是前端工程师的利器,就连老牌dreamweaver 都可以支持,我们怎么好意思拒绝这个好东西呢? 有 ... 
- SQL学习之联结表的使用
			1.简介:"联结(join)表"是SQL最强大的功能之一.联结是利用SQL的SELECT能执行的最重要的操作,很好地理解联结及其语法是学习SQL的极为重要的部分! 在能够有效的使用 ... 
- C#导出Word或Excel文件总显示Html标记
			原因:Word或Excel文件包含的GridView没有查询到数据. 
- 转载 LayoutInflater的inflate函数用法详解
			http://www.open-open.com/lib/view/open1328837587484.html LayoutInflater的inflate函数用法详解 LayoutInflater ... 
- poj2311
			博弈论——sg,mex sg性质:1.在末态的状态点为N态. 2.P态的下一步有一个是N态 3.N态的下一步全部是P态. 当然这是对于单点一个游戏的情形,也相当于NIM只有一堆石子. mex(mini ... 
- Java的跨平台原理
			JAVA的跨平台原理 JAVA的跨平台原理 Java是一种简单易用.完全面向对象.有平台无关性.安全可靠的.主要面向Internet的开发工具.Java自从1995年正式面世以来,它的快速发展已经使整 ... 
- Ubuntu 14.04 上使用 Nginx 部署 Laravel
			本教程将会涉及以下工具: Ubuntu 14.04 LTS PHP 5.5 MySQL Laravel 5.0 Nginx 参考文章:Ubuntu 14.04 上使用 Nginx 部署 Laravel ... 
