如果你只会JQuery的插件式开发, 那么你可以进来看看?

对于JQuery的学习,已经有3年多的时间了,直到去年与我的组长一起做项目,看到他写的JS,确实特别漂亮,有时甚至还看不太懂,

我才发现其实我不太会JQuery。所以我有时间就会去看看他写的JS代码,直到今天我都会很怀恋那段在清大的日子,是我人生思想道路上的一次艳遇。

我到现在都一直喜欢去看一些牛人的js文章,譬如像 (叶小钗,司徒正美,tom大叔)等人的文章都是很不错的。

上面的话说多了,来看看我如何输写JS代码,模块化的思路整理,大概有下面的几种情况:

第一种:教你如何在项目中编写一个可以通用的弹框,废除掉 alert("shit")

var alertBox = function (option) {
//扩展区域
var options = {
w: '',
title: '提示:',
msg: '',
msgExt: '',
MsgArr: [],
yes_btn: "确定",
no_btn: "取消",
yesBool: true,
noBool: true,
ok_Fun: null,
backgroundColor: '#DC0100',
AutoFun: null //----自执行函数----
}
//---继承合并,形成组合的options参数----
option = $.extend({}, options, option || {});
//--随机生成一个ID--
var obj_msgprint = "msgprint_" + parseInt(Math.random() * 1000);
//--确定--
option.yes_btn = option.yesBool ? "<a id='a_activateYes' style= background-color:" + option.backgroundColor + " href='javascript:;'>" + option.yes_btn + '</a>' : "";
//--取消--
option.no_btn = option.noBool ? '<a id="a_activateNo" class="cancel" href="javascript:;">' + option.no_btn + '</a>' : "";
if (option.noBool) {
noBtn = "";
} var allMsgArr = [];
if (option.MsgArr.length > 0) {
for (var item in option.MsgArr) {
allMsgArr.push("<p class='big'>" + option.MsgArr[item] + "</p>");
};
}
if (option.msg != '') {
allMsgArr.push("<p class='big'>" + option.msg + "</p>");
}
if (option.msgExt != '') {
allMsgArr.push("<p style='text-align:center;'>" + option.msgExt + "</p>");
} var boxContentArr = ["<div id='" + obj_msgprint + "' class='albox' style='position:absolute;z-index:1002;display:block;width:" + option.w + "'>
<div class='headbox' style='background-color: " + option.backgroundColor + "'>", "<p>" + option.title + "</p>", "</div>
<div class='conbox' style='border-color: " + option.backgroundColor + "'><div class='txt'>" + allMsgArr.join('') + "</div>
<div class='btnbox'>", option.yes_btn, option.no_btn, "</div></div></div>"]; $("body").append(boxContentArr.join(''));
$("#a_activateNo,#a_closeActivate,#a_activateYes").click(function () {
$("#" + obj_msgprint).hide();
mask.hide();
$("#" + obj_msgprint).remove();
mask.remove();
if (option.ok_Fun && (typeof (option.ok_Fun) === 'function') && $(this).is("#a_activateYes")) {
option.ok_Fun.apply();
}
});
//按下回车键
$(document).keypress(function (e) {
var ev = e || event;
if (ev.keyCode == 13) {
$("#a_activateYes").trigger("click");
}
});
//***************创建遮罩效果*****************/
var mask = $("<div id=\"maskOfDiv\"></div>"); //--Div遮罩----
$("body").append(mask);
var sh = document.documentElement.scrollHeight,
ch = document.documentElement.clientHeight,
height = sh > ch ? sh : ch;
mask.css({
"position": "absolute",
"top": "0",
"right": "0",
"bottom": "0",
"left": "0",
"z-index": "1000",
"background-color": "#000000",
"display": "none",
"height": height
});
mask.show().css("opacity", "0.3");
$("#" + obj_msgprint).show();
//***************创建遮罩效果******************/
//-------居中提示类型---------
var dom_obj = document.getElementById(obj_msgprint);
dom_obj.style.top = ((document.documentElement.clientHeight - $("#" + obj_msgprint).height()) / 2) + "px";
dom_obj.style.left = (document.documentElement.scrollLeft + (document.documentElement.clientWidth - $("#" + obj_msgprint).width()) / 2) + "px";
//------自动执行函数--------
if (option.AutoFun && (typeof (option.AutoFun) === 'function')) {
option.AutoFun.apply();
}
}
window.alertBox = alertBox;

调用插件:

<script type="text/javascript">
alertBox({ msg: "干掉alert,你看行不行!", yes_btn: "alertBox"});
</script>

大家可以重点去学习,$.extend():

               //---继承合并,形成组合的options参数----

option = $.extend({}, options, option || {});

截图效果:

               

==========================================================

第二种: 教你如何用js的 prototype 原型链模式,做一个通用的验证插件。

 

调用插件:

<form class="familyClass">
<input type="text" class="Validate" name="Phone" id="Phone" value="@Model.Phone"
data-val="{type:'phone',initMsg:'请输入您的手机号!',sucMsg:'手机号码验证成功!',errorMsg:'请输入正确的手机号!'}"/>
<form>
<script type="text/javascript">
var familyForm = new FormValidateCommon(".familyClass", false);
familyForm.init();
familyForm.validatorAll();
</script>

上面的调用实现了很灵活的自动式标签绑定验证,但是只适合一种一个项目的通用样式的提示。

大家可以重点去学习,FormValidateCommon.prototype = {} :

截图效果:

============================================

第三种:用js制作实现一个漂亮的下拉框插件:selectPlus

 

调用插件:

 <div class="order">  
<div style="width: 124px;" class="seleitem">
<input type="hidden" name="pay-name" data-name="data" value="已支付">
<input type="hidden" name="orderPayNum" data-value="data" value="1">
<i id="opOption"></i>
<a id="orderPay" class="show" href="javascript:void(0);" value="1">已支付</a>
<p style="width: 140px; height: 55px;">
<a value="" href="javascript:void(0)" style="display: none;" class="">全部</a>
<a value="0" href="javascript:void(0)" style="display: none;">未支付</a>
<a value="1" href="javascript:void(0)" style="display: none;" class="current">已支付</a>
</p>
</div>
</div>
<script type="text/javascript">
$(function () {
         //-------------插件调用-------------------------------
         $(".order").selectPlus({ index: 0 });//--支付状态,{index:为选中第一个}
     
      });
   </script>

截图效果:

======================================================================

第四种: 续 : selectPlus                               

对于上面的selectPlus我还有话要说,对于插件的思想,未必真的就很好,看了BootStrap的一些插件源代码,你会发现,它还结合了一种绑定式的思想。

对于上面提到的所有插件式写法,其实我们都可以用绑定式的思想去简化代码量。

在上面的代码中加上,加上如下代码:

(function ($) {
$.fn.selectPlus = function (option) {
//.........可以参考上面的selectPlus.......
} //----------很简单的关键代码-------------------
$(window).on('load', function () {
        //取得元素上带data-tip="on"的元素
        $('[data-select="on"]').each(function () {
            $(this).selectPlus();
        })
    })
});

调用变成了这样:

 <div class="order" data-select="on">
//..............
</div>

希望小伙伴们也都能领悟,吃饭了哦!

在寂寞的日子里沉淀自己,在程序的日子里找到自己,我为梦想而坚持!
 

JQuery的插件式开发的更多相关文章

  1. 如果你只会JQuery的插件式开发, 那么你可以进来看看?

    对于JQuery的学习,已经有3年多的时间了,直到去年与我的组长一起做项目,看到他写的JS,确实特别漂亮,有时甚至还看不太懂, 我才发现其实我不太会JQuery.所以我有时间就会去看看他写的JS代码, ...

  2. C#学习笔记-----基于AppDomain的"插件式"开发

    很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...

  3. ctkPlugin插件系统实现项目插件式开发

    插件式开发体会: 自开始写[大话QT]系列就开始接触渲染客户端的开发,说是开发不如更多的说是维护以及重构,在接手这块的东西之前自己还有点犹豫,因为之前我一直认为客户端嘛,没什么技术含量,总是想做比较有 ...

  4. MVC 插件式开发

    MVC 插件式开发 在开发一个OA系统是,我们可能遇到 A模块. B模块 .C模块,这也模块组成一个完整的系统,买给客服.现在又有一个客服要我们做一个OA系统,唉我们发现,跟上一个OA系统差不多,但没 ...

  5. .NET MVC 简单的插件式开发

    插件式开发的优势 1.提高软件的复用度 2.提高软件开发的并行性 3.缩短软件的研发周期.节约研发成本,带给程序开发人员更多的灵活性,产品在软件发布以后还可以添加新的插件和完善已有的功能. 4.方便软 ...

  6. 基于AppDomain的"插件式"开发

    很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统, ...

  7. 也来学学插件式开发续-利用MEF

    前面一个博客:也来学学插件式开发中很多朋友留言说可以用MEF来实现.于是我就试着用MEF实现了一下. 步骤和上一篇差不多,只是加载插件的方式有所不同.这只是一个自己的示例程序,肯定有很多不足之处,欢迎 ...

  8. MEF 插件式开发 - 小试牛刀

    原文:MEF 插件式开发 - 小试牛刀 目录 MEF 简介 实践出真知 面向接口编程 控制反转(IOC) 构建入门级 MEF 相关参考 MEF 简介 Managed Extensibility Fra ...

  9. MEF 插件式开发 - WPF 初体验

    原文:MEF 插件式开发 - WPF 初体验 目录 MEF 在 WPF 中的简单应用 加载插件 获取元数据 依赖注入 总结 MEF 在 WPF 中的简单应用 MEF 的开发模式主要适用于插件化的业务场 ...

随机推荐

  1. 使用 CodeIgniter 框架快速开发 PHP 应用(四)

    原文:使用 CodeIgniter 框架快速开发 PHP 应用(四) 使用 CI 简化数据库开发你学习CI 是因为你想要使编程更容易和更有生产力.这一章讲述CI的Active Record类. 如果C ...

  2. 十天学Linux内核之第六天---调度和内核同步

    原文:十天学Linux内核之第六天---调度和内核同步 心情大好,昨晚我们实验室老大和我们聊了好久,作为已经在实验室待了快两年的大三工科男来说,老师让我们不要成为那种技术狗,代码工,说多了都是泪啊,, ...

  3. Ubuntu中编译链接Opencv应用的简便方式

    安装完毕Opencv后,使用下面命令查 看编译/连接參数 pkg-config --cflags --libs opencv 可看到例如以下信息 -I/usr/include/opencv  /usr ...

  4. 基于Qt语音识别功能

    基于在最近的研究Qt语音识别平台下.在此记录12 首先,语音识别做三件事 1.记录用户的语音文件到本地 2.将用户语音编码 使用flac或者speex进行编码 3.使用第三方语音识别API或者SDK进 ...

  5. java_代码注释风格

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><templa ...

  6. hadoop编程小技巧(5)---自己定义输入文件格式类InputFormat

    Hadoop代码測试环境:Hadoop2.4 应用:在对数据须要进行一定条件的过滤和简单处理的时候能够使用自己定义输入文件格式类. Hadoop内置的输入文件格式类有: 1)FileInputForm ...

  7. 浏览器扩展系列————给MSTHML添加内置脚本对象【包括自定义事件】

    原文:浏览器扩展系列----给MSTHML添加内置脚本对象[包括自定义事件] 使用场合: 在程序中使用WebBrowser或相关的控件如:axWebBrowser等.打开本地的html文件时,可以在h ...

  8. C_数据结构

    线性结构 线性结构的特点是:在数据元素的飞空有限集中,(1)存在唯一的一个被称作“第一个”的数据元素:(2) 存在唯一一个被称做“最后一个”的数据元素:(3)除第一个外,集合中的每一个元素都只有一个前 ...

  9. SSAS系列——【05】多维数据(编程体系结构)

    原文:SSAS系列--[05]多维数据(编程体系结构) 1.什么是AMO? 翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在 ...

  10. C语言编写Windows服务程序

    原文:C语言编写Windows服务程序 #include <Windows.h> #include <stdio.h> #define SLEEP_TIME 5000 // 间 ...