首页    新文章  联系  管理  订阅 

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

需求

开发 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. [IDE工具配置]myeclipse 2014 专业版 安装 svn插件

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/38342411 本文作者:sushengmiyan 团队合作的项目肯定少不了版本控制,那 ...

  2. Java相关错误

    http://blog.csdn.net/pipisorry/article/details/51291063 使用hadoop jar ./Hw2Part1.jar /hw2/example-inp ...

  3. iOS中 本地通知/本地通知详解 韩俊强的博客

    布局如下:(重点讲本地通知) iOS开发者交流QQ群: 446310206 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 Notification是智能手机应用编 ...

  4. 03 CheckBox 复选框

    五  CheckBox  复选框     >概念:可以从一个集合选项中选择一个或者多个选项     >属性:checked   选择状态     >使用:           > ...

  5. mysql进阶(二十四)防御SQL注入的方法总结

    防御SQL注入的方法总结 这篇文章主要讲解了防御SQL注入的方法,介绍了什么是注入,注入的原因是什么,以及如何防御,需要的朋友可以参考下. SQL注入是一类危害极大的攻击形式.虽然危害很大,但是防御却 ...

  6. 我也来写spring

    本文可作为北京尚学堂 spring课程的学习笔记 我们还是用上一篇文章的例子 给数据库中增加一个user 整体代码如下 package com.bjsxt.test; import com.bjsxt ...

  7. flex 强制转换类型失败无法将object转换为XXX

    错误描述 flex在加载module时报出如题所示的错误, 实际表现 问题就出现在这 我取消这个错误提示框 再次在前台查询数据 就一切ok 问题就出现在这一句 var zoufangModel:ZfR ...

  8. Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)

    上一篇文章<Linux Debugging:使用反汇编理解C++程序函数调用栈>没想到能得到那么多人的喜爱,因为那篇文章是以32位的C++普通函数(非类成员函数)为例子写的,因此只是一个特 ...

  9. 海量数据挖掘MMDS week2: LSH的距离度量方法

    http://blog.csdn.net/pipisorry/article/details/48882167 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  10. SQL2008清除数据库日志脚本

    --数据库名称sjjhzx,日志文件名称ksoa_zuizhong_Log' USE sjjhzx    GO    ALTER DATABASE sjjhzx SET RECOVERY SIMPLE ...