• Jquery 实现一个简单的 HTML 代码格式化工具


    Jquery 实现一个简单的 HTML 代码格式化工具,主要功能,对中英文之间加入空格,格式化 HTML 代码:

    <html>
      <head>
        <title>HTML 代码格式化工具</title>
        <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
        <style>
          input {
            display: inline-block;
            padding: 6px 12px;
            margin-bottom: 0;
            font-size: 14px;
            font-weight: normal;
            text-align: center;
            white-space: nowrap;
            background-image: none;
            border: 1px solid transparent;
            vertical-align: middle;
            -webkit-appearance: button;
            background-color: #16c0f8;
            bottom: 0;
            right: 0;
            box-shadow: none;
             80px;
            border-radius: 0;
            color: #fff;
            opacity: 0.85;
            margin: 0 5px;
            padding: 8px 20px 7px;
            text-decoration: none; /*background-color: #ddd;
            color: #666;*/
            box-sizing: border-box;
            border-radius: 3px;
            cursor: pointer;
          }
        </style>
      </head>
      <body>
        <div style="60%;height:100%; margin:0 auto">
          <p>
            <strong>HTML 代码格式化工具</strong>
          </p>
          <p>
            <textarea
              name="oldHtmlCode"
              id="oldHtmlCode"
              cols="160"
              rows="24"
              style="100%;height:40%;"
            ></textarea>
          </p>
          <p style="text-align:right;">
            <input type="button" name="btnFormat" id="btnFormat" value="格式化" />
          </p>
          <p>
            <textarea
              name="newHtmlCode"
              id="newHtmlCode"
              cols="160"
              rows="24"
              style="100%;height:40%;"
            ></textarea>
          </p>
        </div>
      </body>
    </html>
    <script type="text/javascript">
      $(function() {
        $("#btnFormat").click(function() {
          //匹配英文临近中文
          var p1 = /([A-Za-z])((<[^<]*>)*[\u4e00-\u9fa5]+)/gi;
          var r = $("#oldHtmlCode").val();
          r = r.replace(p1, "$1 $2");
          //匹配数字临近中文
          var p2 = /([0-9])([\u4e00-\u9fa5]+)/gi;
          r = r.replace(p2, "$1 $2");
          //匹配中文临近数字
          var p3 = /([\u4e00-\u9fa5]+)([0-9])/gi;
          r = r.replace(p3, "$1 $2");
    
          var p4 = /([\u4e00-\u9fa5]+(<[^<]*>)*)([A-Za-z])/gi;
          r = r.replace(p4, "$1 $3");
          //r = r.replace(") ", ")");
          $("#newHtmlCode").val(format(r));
        });
        $("#btnFormat").click(function() {
          //获取贴入文本域的需要格式化的html代码
          var text = $("#origin").val();
          //执行格式化函数对文本进行格式化
          var fmt = format(text);
          //将格式化后的代码放入文本域进行显示
          $("#result").val(fmt);
        });
        function format(strs) {
          var left = null;
          var right = null;
          var str = "";
          var blank = "\t";
          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>
    

    目前还不是很完善,只是解决了自己常用的一些场景。

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/weisenz/p/2406390.html
Copyright © 2020-2023  润新知