【自制】前端html代码格式化小工具
2016-07-06 12:39
656 查看
前言:当前端html代码进行大幅度调整后经常会出现代码缩进错乱的问题,或者在javascript中进行大段的html代码的字符串拼接时为了更方便的看出html的结构,出于以上两点原因,我们需要对html代码进行格式化操作,手工格式化容易出错,费时费力,于是本人自制了一个为html代码自动进行格式化的小工具,功能如图所示。
具体源代码(附带说明注释)写在下面。
注:代码中js部分涉及jquery的使用,建议在使用前请先引入jquery文件。
具体源代码(附带说明注释)写在下面。
注:代码中js部分涉及jquery的使用,建议在使用前请先引入jquery文件。
<span style="font-size:18px;"><!--页面html代码--> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"/> <meta name="author" content="liyanan"/> <title>html标签格式化</title> <!--页面元素样式--> <style> body{ width:1200px; margin:0 auto; font-family:Microsoft YaHei; font-size:14px; } a{ text-decoration:none; } textarea{ width:100%; height:300px; } #btn,#select{ display:inline-block; width:100px; height:30px; line-height:30px; color:#fff; background-color:#FF863E; text-align:center; margin:20px 0 0 0; } #btn:hover,#select:hover{ background-color:#FF6100; } </style> </head> <body> <p>贴入要格式化的HTML代码:</p> <!--这里是贴入需要格式化的html代码的文本域--> <textarea id="origin"></textarea> <br/> <!--点击“开始格式化”按钮对代码进行格式化--> <a id="btn" href="javascript:;">开始格式化</a> <!--点击“复制按钮”会自动复制格式化后的代码至剪贴板--> <a id="select" href="javascript:;">复制</a> <p>格式化结果如下:</p> <!--这里显示格式化后的代码的文本域--> <textarea id="result"></textarea> </body> <!--引入jquery文件--> <script src="jquery-2.1.4.min.js"></script> <script> $(function(){ //开始格式化点击事件 $('#btn').click(function(){ //获取贴入文本域的需要格式化的html代码 var text=$('#origin').val(); //执行格式化函数对文本进行格式化 var fmt=format(text); //将格式化后的代码放入文本域进行显示 $('#result').val(fmt); }); //复制按钮点击事件 $('#select').click(function(){ //全选文本域中内容 $('#result').select(); //将选中的文本内容粘贴至系统剪贴板 document.execCommand("Copy"); //给用户反馈“代码已复制”提示 alert("已复制好,可贴粘。"); }); //文本框获得焦点事件 $('#origin,#result').focus(function(){ //全选文本域内文本内容以便对文本内容进行删除或复制操作 $(this).select(); }); //代码格式化函数,strs为传入的需要格式化代码的字符串 function format(strs){ //声明left变量用于存放html标签中左尖括号(‘<’)位置 var left=null; //声明right变量用于存放html标签中右尖括号(‘<’)位置 var right=null; //声明str变量,用于存放格式化后的代码字符串 var str=''; //存放html代码所进所用的空格 var blank='\t'; //存放若干个blank变量,用于控制代码缩进的深度 var fmt=[]; //对需要格式化的代码字符串进行遍历 for(var i=0;i<strs.length;i++){ //发现左尖括号后将其位置记录在left变量上 if(strs[i]=='<'){ left=i; }else if(strs[i]=='>'){ //发现右尖括号后将其记录在right变量上 right=i; } //当做尖括号右尖括号都记录了一个位置后,说明二者之间的内容为代码的一行 if(typeof left=='number'&&typeof right=='number'){ //判断字符串左尖括号后是否为‘/’,如果满足,表明该行代码为双标签的闭合标签 if(strs[left+1]=='/'){ //对数组中的空格做出栈,确保代码缩进正确 fmt.pop(); //将该行代码放入str变量中 str+=fmt.join('')+strs.slice(left,right+1); //判断字符串右尖括号前一位是否为‘/’,如满足,表明该标签为严格闭合的单标签 }else if(strs[right-1]=='/'){ str+=fmt.join('')+strs.slice(left,right+1); //判断字符串开头是否包含input/imig/hr/br/link/meta等字母,用于屏蔽非严格未闭合的单标签 }else if(strs.slice(left,right).search(/\<input|\<img|\<hr|\<br|\<link|\<meta/)!=-1){ str+=fmt.join('')+strs.slice(left,right+1); //对双标签的左标签进行的操作 }else{ str+=fmt.join('')+strs.slice(left,right+1); //向数组中堆入一个空格,确保下一行双标签的左标签的缩进正确 fmt.push(blank); } //对right位置后的字符串进行遍历 for(var j=right;j<strs.length;j++){ //查找right位置后,第一个左尖括号的位置,二者之间的内容即为代码中的文本内容 if(strs[j]=='<'){ //去掉文本中多余的空格 var s=strs.slice(right+1,j).replace(/\s*/g,''); if(s){ //当文本中去掉空格后任然有内容,则将文本拼入str变量进行存储 str+=s; } break; } } //每次获得一次左右尖括号的位置后,即得到了一行代码,为代码做换行处理 str+='\n'; //重置left、right的值,用于for循环的下次存储做右尖括号的位置 left=null; right=null; } } //返回得到的格式化完成的html代码字符串 return str; } }) </script> </html></span>
相关文章推荐
- HTML学习笔记1.8-添加图片
- 项目开发中html一点心得
- HTML新人基础学习1.7—预格式文本
- HTML学习总结(4)-浮动,清浮动
- StringUtils.htmlEncode()--html标签过滤方法实现
- swiper的基础使用(十六)
- HTML-W3School-20160706
- html 显示一个button按钮
- HTML学习总结(3)-块元素,内嵌元素
- CHM文件(已编译的 HTML 帮助文件)打开不显示的解决办法
- mvc4 @Html.DropDownList
- HTML结构与语法
- HTML学习总结(1)-常用标签,选择器,a四伪类
- 网页中插入FLASH(swf文件)的html代码
- HtmL 好像 插代码有 行号 MarkDown写代码 没行号
- html元素中class属性值多个空格分格是什么意思?
- HTML学习笔记(上)
- 页内跳转
- HTML data-*自定义属性
- 服务器控件类与HTML标签之间的对应关系