首页    新文章  联系  管理  订阅 

我知道这一天终将会到来,现在,它来了。

需求

开发 SharePoint 的 CSOM 应用时,经常需要在网页上输出一些信息。

这种需求和 alert 的弹窗、F12 的断点查看信息的场景是不一样的:在这种场景下,你就是端着杯咖啡靠在那里坐着,看着关于应用程序运行的信息不断的在网页上输出,不用去关闭弹窗、也不用去设置断点。

详细的功能需求如下:

  • 输出的信息中自动包含时间
  • 输出的信息按照类型显示不同的样式
  • 输出的信息类型包括:普通信息、调试信息、警告、错误
  • 可选按照时间升序输出信息(稍作修改可以时间降序排列)

设计

原理与实现

首先,来个简单的原理。写一个空的 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>

于是,内容就出来了:

接下来,的代码就很简单了(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>

嗯,还不错。看这些消息,你就应该知道在 SharePoint 里面怎么用了吧 :)

如何写jquery插件的更多相关文章

  1. 自己写jquery插件之模版插件高级篇(一)

    需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...

  2. 写JQuery插件的基本知识

    普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: 复制代码 代码如下: $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.exten ...

  3. [原创作品]手把手教你怎么写jQuery插件

    这次随笔,向大家介绍如何编写jQuery插件.啰嗦一下,很希望各位IT界的‘攻城狮’们能和大家一起分享,一起成长.点击左边我头像下边的“加入qq群”,一起分享,一起交流,当然,可以一起吹水.哈,不废话 ...

  4. 写jQuery插件时,一种更好的合并参数的方法

    看到很多人写jQuery插件时居然这样合并参数: this.defaults = { 'color': 'red', 'fontSize': '12px', 'textDecoration':'non ...

  5. 写JQuery 插件

    什么?你还不会写JQuery 插件 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再 ...

  6. 锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]

    1.表单验证插件Validation   2.表单插件Form   3.动态事件绑定插件livequery 可以为后来的元素绑定事件   类似于jQuery中的live()方法     4.jQuer ...

  7. 什么?你还不会写JQuery 插件

    前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论 ...

  8. 写JQuery 插件 什么?你还不会写JQuery 插件

    http://www.cnblogs.com/Leo_wl/p/3409083.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui ...

  9. 第一次写jquery插件,来个countdown计时器吧

    之前同学做个购物商城秒杀活动需要计时器的功能,在用jquery提供的countdown插件时,一直报错,貌似还需要依赖除jquery之外的其他插件,搞了半天也没搞成功,就叫我帮忙写个.然而我并没有写过 ...

  10. 写jQuery插件

    如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...

随机推荐

  1. Dynamics CRM CRM Explorer missing from Visual Studio 2012

    CRMSDK中提供的develop toolkit工具比较适合初级开发者或者是多人团队的开发,在代码版本控制及部署上均有明显的优势. 但今天在装完这个工具后,打开vs2012可以新建一个package ...

  2. WIP 投料报 Invalid Serial Number

    1.接口表数据检查无误 2.同样数据界面能正常完成 界面做trace SQL ID: b2mw8gjyv7guh Plan Hash: 2015965341 DELETE FROM MTL_SERIA ...

  3. Ajax及jQuery学习

    AJAX(Asynchronous JavaScript and XML),异步的javaScript与XML AJax中一个重要的对象是XMLHttpRequest. function ajaxSu ...

  4. qualcomm memory dump 抓取方法

    Memory dump是系统出现crash时常用的分析故障原因的方法,qualcomm 各子系统运行时,为方便debug,都会开辟ram log和debug variable用于保存各系统运行信息及健 ...

  5. Ubuntu中firefox设置成中文

    进入 http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly 按版本选择下去,帮助(help)-->关于,查看浏览器的版本号 所以,目录是3 ...

  6. 控件之combox

    一. combox显示     首先combox有两个属性来存储数据:DisplayMember(显示成员),ValueMember(值成员) ,DisplayMember是我们在combox界面上看 ...

  7. MacTalk·人生元编程 - 读书笔记

    简介 <MacTalk·人生元编程>是一本随笔文集,主要内容来自作者的微信公众平台"MacTalk By 池建强".本书撰写于2013年,书中时间线却不止于此.作者以一 ...

  8. 简谈高通Trustzone的实现

    从trust zone之我见知道,支持trustzone的芯片会跑在两个世界. 普通世界.安全世界,对应高通这边是HLOS,QSEE. 如下图: 如下是HLOS与QSEE的软件架构图 HLOS这两分为 ...

  9. 敏捷测试(2)--ATDD概念

    什么是验收测试驱动开发 在准备实施一个功能或特性之前,首先团队需要定义出期望的质量标准和验收细则,以明确而且达成共识的验收测试计划(包含一系列测试场景)来驱动开发人员的TDD实践和测试人员的测试脚本开 ...

  10. Css技术入门笔记02

    第一篇见Css入门笔记01http://blog.csdn.net/qq_32059827/article/details/51406674 4.其他选择器 4.1.关联选择器 有时在页面上会出现我们 ...