自己寫一個 jQuery 插件


我知道這一天終將會到來,現在,它來了。

 

需求

開發 SharePoint 的 CSOM 應用時,經常需要在網頁上輸出一些信息。

這種需求和 alert 的彈窗、F12 的斷點查看信息的場景是不一樣的:在這種場景下,你就是端着杯咖啡靠在那里坐着,看着關於應用程序運行的信息不斷的在網頁上輸出,不用去關閉彈窗、也不用去設置斷點。

詳細的功能需求如下:

  • 輸出的信息中自動包含時間
  • 輸出的信息按照類型顯示不同的樣式
  • 輸出的信息類型包括:普通信息、調試信息、警告、錯誤
  • 可選按照時間升序輸出信息(稍作修改可以時間降序排列)

 

設計

jquery.message.js 設計 

 

原理與實現

首先,來個簡單的原理。寫一個空的 plugin:

   1: $.fn.message = function () {
   2:     return this;
   3: }

這個 plugin 的用法就是:

   1: var msg = $("#divMessage").message();

 

這里面的關鍵就是拿到了 this 這個對象,后面的所有代碼、功能的實現都依賴於這個對象。

接下來,實現 show 函數來做測試。show 函數將接受消息內容作為參數,然后顯示出來:

   1: $.fn.message = function () {
   2:     this.show = function (msg) {
   3:         this.html(msg);
   4:     }
   5:     return this;
   6: }

然后,可以這樣用:

   1: <div id="divMessage">Messaeg</div>
   2: <script>
   3:     $(document).ready(function () {
   4:         var msg = $("#divMessage").message();
   5:         msg.show("hello");
   6:     });
   7: </script>

於是,內容就出來了:

image

接下來,的代碼就很簡單了(jquery.message.js):

   1: /* 時間格式化函數 */
   2: jQuery.utility = {
   3:     leading:function (char, width, value) {
   4:         var ret = value.toString();
   5:         while (width > 1) {
   6:             if (value >= (Math.pow(10,width - 1))) {
   7:                 break;
   8:             } else {
   9:                 ret = char + ret;
  10:             }
  11:             width--;
  12:         }
  13:         return ret;
  14:     },
  15:  
  16:     now : function () {
  17:         var date = new Date();
  18:         var ret = {};
  19:         ret.hours = $.utility.leading('0', 2, date.getHours());
  20:         ret.minutes = $.utility.leading('0', 2, date.getMinutes());
  21:         ret.seconds = $.utility.leading('0', 2, date.getSeconds());
  22:         return ret;
  23:     }
  24: };
  25:  
  26: /* 消息插件函數 */
  27: $.fn.message = function () {
  28:     this.show = function (msg) {
  29:         this.html(msg);
  30:     }
  31:     this.clear = function () {
  32:         this.html('');
  33:     }
  34:     this.append = function (tag, msg) {
  35:         var date = $.utility.now();
  36:         var tagContent = "<span class='msg-" + tag + "'>" + tag + "</span><span class='msg-datetime'>" + date.hours + ":" + date.minutes + ":" + date.seconds + "</span>";
  37:         this.html(this.html() + "<br/>" + tagContent + "<span class='msg-message'>" + msg + "</span>");
  38:     }
  39:     this.warning = function (msg) {
  40:         this.append("warning", msg);
  41:     }
  42:     this.error = function (msg) {
  43:         this.append("error", msg);
  44:     }
  45:     this.succeed= function (msg) {
  46:         this.append("succeed", msg);
  47:     }
  48:     this.debug = function (msg) {
  49:         this.append("debug", msg);
  50:     }
  51:     this.info = function (msg) {
  52:         this.append("info", msg);
  53:     }
  54:     return this;
  55: }

當然,少不了 CSS 樣式(jquery.message.css):

   1: .msg-message, .msg-info, .msg-warning, .msg-error, .msg-succeed, .msg-debug, .msg-datetime, .msg-view-link {
   2:     padding:3px;
   3:     -moz-border-radius:5px;
   4:     -webkit-border-radius:5px;
   5:     border-radius:5px;
   6:     margin-right:2px;
   7:     margin-left:2px;
   8:     line-height:2em;
   9:     font-family:Consolas, 'Lucida Console', 'DejaVu Sans Mono', monospace;
  10:     cursor:default;
  11: }
  12: .msg-info, .msg-warning, .msg-error, .msg-succeed, .msg-debug, .msg-datetime {
  13:     box-shadow:rgba(0,0,0,0.2) 1px 1px;
  14: }
  15: .msg-warning {
  16:     border:1px solid yellow;
  17: }
  18: .msg-error {
  19:     border:1px solid red;
  20: }
  21: .msg-succeed {
  22:     border:1px solid green;
  23: }
  24: .msg-debug {
  25:     border:1px solid darkgray;
  26: }
  27: .msg-info {
  28:     border:1px solid blue;
  29: }
  30: .msg-datetime {
  31:     border:1px dotted darkgray;
  32: }

 

部署

很簡單,只需要引入 jquery-{version}.js 和 jquery.message.js (上面的 JS 代碼即是)、jquery.message.css。

   1: <link rel="stylesheet" href="../Style/jquery.message.css" />
   2: <script type="text/javascript" src="../Reference/jquery/jquery-1.11.1.min.js"></script>
   3: <script type="text/javascript" src="../Library/jquery.message.js"></script>

P.S. 對於 jQuery 這樣有開發版和 min 版的 js 組件,可以考慮用 ScriptManager 來根據解決方案的配置動態引用對應版本。

 

應用

好了,下面寫幾句看看效果:

   1: <link rel="stylesheet" href="../Style/jquery.message.css" />
   2: <script type="text/javascript" src="../Reference/jquery/jquery-1.11.1.min.js"></script>
   3: <script type="text/javascript" src="../Library/jquery.message.js"></script>
   4: <div id="divMessage"></div>
   5: <script>
   6:     $(document).ready(function () {
   7:         var msg = $("#divMessage").message();
   8:         msg.succeed("Host web context ready.");
   9:         msg.debug("List title is 'Data List'.");
  10:         msg.error("List doesn't exist.")
  11:     });
  12: </script>

image 

嗯,還不錯。看這些消息,你就應該知道在 SharePoint 里面怎么用了吧 :)

 

 

署名-非商業使用-禁止演繹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM