<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      用原生JS進行CSS格式化和壓縮

      前言

      一直比較喜歡收集網頁特效,很多時候都會遇到CSS被壓縮過的情況,這時查看起來就會非常不方便,有時為了減少文件大小,也會對自己的CSS進行壓縮,網上提供這樣服務的很多,但都不盡如人意,因此打算自己動手寫一個JS來進行CSS的格式化和壓縮

      原理

      CSS的結構如下:

      選擇器{
        css屬性聲明:值;
      }

      所以對CSS格式化也就比較簡單,大致分為以下幾步;

      1、把多個空格合并成一個,去掉換行

      2、對處理后的字符串按"{"進行分組

      3、遍歷分組,對含有"}"的部分再次以"}"進行分組

      4、對分組后的數據進行處理,主要是加上空格和換行

      對CSS壓縮就比較簡單了,把空格合并,去掉換行就可以了

      格式化

      下面分步對以上步驟進行實現。

      初始化:

      function formathtmljscss(source, spaceWidth, formatType) {
      this.source = source;
      this.spaceStr = " ";
      if (!isNaN(spaceWidth)) {
      if (spaceWidth > 1) {
      this.spaceStr = "";
      for (var i = 0; i < spaceWidth; i++) {
      this.spaceStr += " ";
      }
      }
      else {
      this.spaceStr = "\t";
      }
      }
      this.formatType = formatType;
      this.output = [];
      }

      這里幾個參數分別是要格式化的CSS代碼、CSS屬性聲明前空格寬度,類型(格式化/壓縮)

      1、把多個空格合并成一個,去掉換行:

      formathtmljscss.prototype.removeSpace = function () {
      this.source = this.source.replace(/\s+|\n/g, " ")
      .replace(/\s*{\s*/g, "{")
      .replace(/\s*}\s*/g, "}")
      .replace(/\s*:\s*/g, ":")
      .replace(/\s*;\s*/g, ";");
      }

      2、對處理后的字符串按"{"進行分組

      formathtmljscss.prototype.split = function () {
      var bigqleft = this.source.split("{");
      }

      3、遍歷分組,對含有"}"的部分再次以"}"進行分組

      formathtmljscss.prototype.split = function () {
      var bigqleft = this.source.split("{");
      var bigqright;
      for (var i = 0; i < bigqleft.length; i++) {
      if (bigqleft[i].indexOf("}") != -1) {
      bigqright = bigqleft[i].split("}");
      }
      else {

      }
      }
      }

      4、對分組后的數據進行處理,主要是加上空格和換行

      這里的處理主要分為,把CSS屬性聲明和值部分取出來,然后加上空格和換行:

      formathtmljscss.prototype.split = function () {
      var bigqleft = this.source.split("{");
      var bigqright;
      for (var i = 0; i < bigqleft.length; i++) {
      if (bigqleft[i].indexOf("}") != -1) {
      bigqright = bigqleft[i].split("}");
      var pv = bigqright[0].split(";");
      for (var j = 0; j < pv.length; j++) {
      pv[j] = this.formatStatement(this.trim(pv[j]),true);
      if (pv[j].length > 0) {
      this.output.push(this.spaceStr + pv[j] + ";\n");
      }
      }
      this.output.push("}\n");
      bigqright[1] = this.trim(this.formatSelect(bigqright[1]));
      if (bigqright[1].length > 0) {
      this.output.push(bigqright[1], " {\n");
      }
      }
      else {
      this.output.push(this.trim(this.formatSelect(bigqleft[i])), " {\n");
      }
      }
      }

      這里調用了幾個方法:trim、formatSelect、formatStatement,下面一一說明。

      trim:從命名就可以看出是去除首尾空格;

      formathtmljscss.prototype.trim = function (str) {
      return str.replace(/(^\s*)|(\s*$)/g, "");
      }

      formatSelect:是處理選擇器部分語法,做法就是給"."前面加上空格,把","前后的空格去掉,把多個空格合并為一個:

      formathtmljscss.prototype.formatSelect = function (str) {
      return str.replace(/\./g, " .")
      .replace(/\s+/g, " ")
      .replace(/\. /g, ".")
      .replace(/\s*,\s*/g, ",");
      }

      formatStatement:是處理“css屬性聲明:值;”部分的語法,做法就是給":"后面加上空格,把多個空格合并為一個,去掉“#”后面的空格,去掉"px"前面的空格,去掉"-"兩邊的空格,去掉":"前面的空格:

      formathtmljscss.prototype.formatStatement = function (str, autoCorrect) {
      str = str.replace(/:/g, " : ")
      .replace(/\s+/g, " ")
      .replace("# ", "#")
      .replace(/\s*px/ig, "px")
      .replace(/\s*-\s*/g, "-")
      .replace(/\s*:/g, ":");

      return str;
      }

      調用

      調用部分比較簡單,對于格式化來說就是去掉空格和換行,然后分組處理,對于壓縮來說就是去掉空格和換行:

      formathtmljscss.prototype.formatcss = function () {
      if (this.formatType == "compress") {
      this.removeSpace();
      }
      else {
      this.removeSpace();
      this.split();
      this.source = this.output.join("");
      }
      }

      界面HTML代碼:

      View Code
      <div id="content">
      <div class="container">
      <div class="box">
      <div class="main">
      <h2>CSS格式化/壓縮</h2>
      <div id="blurb">
      <fieldset id="options">
      <button id="submit">
      <span>格式化 / 壓縮&nbsp;&nbsp;<img alt="格式化" src="/images/29.png"/></span>
      </button><br/>
      <span>縮進:</span>
      <ul>
      <li>
      <select name="tabsize" id="tabsize">
      <option value="1">tab鍵縮進</option>
      <option value="2">2空格縮進</option>
      <option selected="selected" value="4">4空格縮進</option>
      </select>
      </li>
      </ul><br />
      <span>類型:</span><br />
      <input type="radio" name="format_type" value="format" checked="checked" id="format_format" /><label for="format_format">格式化</label>
      <input type="radio" name="format_type" value="compress" id="format_compress" /><label for="format_compress">壓縮</label>
      </fieldset>
      </div>
      <div id="beauty">
      <fieldset id="textarea-wrap">
      <textarea rows="20" cols="40" id="source"></textarea>
      </fieldset>
      </div>
      </div>
      </div>
      </div>
      </div>

      跟頁面元素按鈕綁定事件:

      View Code
      window.onload = function () {
      var submitBtn = document.getElementById("submit");
      var tabsize = document.getElementById("tabsize");
      var sourceCon = document.getElementById("source");
      var size = 4;
      var formatType = "format";
      submitBtn.onclick = function () {
      var radios = document.getElementsByName("format_type");
      for (i = 0; i < radios.length; i++) {
      if (radios[i].checked) {
      formatType = radios[i].value;
      break;
      }
      }
      var format = new formathtmljscss(sourceCon.value, size, formatType);
      format.formatcss();
      sourceCon.value = format.source;
      }
      tabsize.onchange = function () {
      size = this.options[this.options.selectedIndex].value;
      submitBtn.click();
      return false;
      }
      }

      演示


      歡迎大家測試挑刺哈!

      posted @ 2012-03-25 19:16  artwl  閱讀(5046)  評論(7)    收藏  舉報

      個人簡介

      var ME = {
      	"name": "土豆/Artwl",
      	"job": "coding",
      	"languages": [
      		"JS", "HTML",
                      "CSS", "jQuery"
      		"MVC",".NET",
      		"設計模式"
      	],
      	"hobby": [
      		"閱讀", "旅游",
      		"音樂", "電影"
      	]
      }
      
      TOP
      主站蜘蛛池模板: 一个人看的www免费高清视频| 国产99精品成人午夜在线| 亚洲人成在线观看| 国产男女黄视频在线观看| 国产欧美日韩综合精品一区二区 | 国产永久免费高清在线观看| 成人午夜大片免费看爽爽爽| 成人亚洲一区二区三区在线 | 成人欧美一区在线视频| 在线看免费无码的av天堂| 国产99视频精品免费视频6| 高清无码18| 亚洲午夜理论无码电影| 新宁县| 亚洲欧洲av一区二区| 亚洲精品熟女一区二区| 亚洲av永久无码精品网站| 怀仁县| 欧美牲交a欧美牲交aⅴ图片| 精品 无码 国产观看| 久久精品视频这里有精品| 九九热精品免费视频| 一二三四中文字幕日韩乱码| 丰满人妻熟妇乱精品视频| 人人澡人人妻人人爽人人蜜桃| 亚洲精品区午夜亚洲精品区| 国产欧美综合在线观看第十页| 福利视频在线一区二区| 成人网站免费观看永久视频下载 | 高清不卡一区二区三区| 新野县| 亚洲中文字幕精品一区二区三区| 国产女人和拘做受视频免费| 俄罗斯老熟妇性爽xxxx| 日韩精品国产中文字幕| 国产麻花豆剧传媒精品mv在线| 秋霞人妻无码中文字幕| 欧美伦费免费全部午夜最新| 亚洲人成线无码7777| 国产麻豆91网在线看| 亚洲码欧洲码一二三四五|