美文网首页
HTML源码高亮&缩进

HTML源码高亮&缩进

作者: 夜风SAI | 来源:发表于2017-12-08 17:23 被阅读22次

前言

(写代码实在有点头疼于是来简书更新一些东西)咳咳。。。跳过
近日正在做一个在线网页可视化编辑器,由于需要显示HTML源码,便遇到了一个用户体验问题:源码没有高亮以及缩进/换行很影响阅读,于是乎打开简书,找到了我以前的测试代码,打开F12探究一番,发现是这样的:


TIM截图20180112133627.png

机智的我貌似明白了什么。。。

原理

上色

将HTML源码当做一个字符串来看待,将HTML标签(<div> <img>等等)、行内属性(class value)等等统统包裹进一个新的<span>元素内,然后利用更改<span>元素的class类名,进而影响样式。
注意:不是都包裹进同一个<span>,而是每替换一个地方对应一个<span>

缩进

利用HTML5的新元素<blockquote>即可实现
<blockquote>是什么?

步骤

基本解释已经写在注释中,对于正则不了解的朋友可以自行学习,这里推荐deerchao前辈的讲解:
30分钟正则入门
直接上代码了:

函数:

htmlcode:function(target){
    //获取HTML源码
    var str = $(this).html();
    //批量转义HTML特殊符号
    var mark = /[&<>]/g, mark_val = {"&":"&amp;","<":"&lt;",">":"&gt;"};
    str = str.replace(mark, function(c){
        return mark_val[c];
    });
    //缩进
    str=str.trim()
      .replace(/&lt;(?!\/)(.*?)&gt;/g,function(f){
        return "<blockquote>"+f;
    }).replace(/&lt;\/(.*?)&gt;/g,function(b){
        return b+"</blockquote>";
    });
    //标签上色
    str=str.replace(/&lt;(.*?)&gt;/g,function(tag){
        //属性上色
        tag=tag.replace(/\w+(?==)/g,function(attr){
            return "<span class='attr'>"+attr+"</span>";
        });
        //引号上色
        //设置span的class全部使用单引号,再次替换引号内容即可互不干扰
        tag=tag.replace(/("(.*?)")/g,function(sign){
            return "<span class='sign'>"+sign+"</span>";
        });
        return "<span class='tag'>"+tag+"</span>"
    });
    target.html(str);   
}

css:

.tag{
    color: blueviolet;
}
.sign{
    color:gray;
}
.attr{
    color:rgb(60,122,3);
}

引用:

//targe需为jq对象
$('div').htmlcode(target);

效果

正面:


TIM截图20180112140618.png

反面源码:


TIM截图20180112140628.png

结语

项目地址:FreeUI
还在开发中,喜欢的点个star

相关文章

网友评论

      本文标题:HTML源码高亮&缩进

      本文链接:https://www.haomeiwen.com/subject/qxxyixtx.html