jQuery是一个非常好的框架,涉及的内容比较多,随着现在浏览器的发展,原生JS的功能越来越强大,jQuery包含内容很多,但是常用的功能无非涉及到Dom操作,事件,样式,表单和Ajax交互。引入那么大的库,感觉很多又没有用到,至此萌发出自己构建一个JS轻量级库的想法,此库只实现常用的需求点,同时对于IE等老版本浏览器不兼容,让此JS能卸下历史负担,立足当下。代码大约14KB,已经上传github地址: https://github.com/JackWangCUMT/jYD,
最后,限于个人精力有限,此框架难免有不足之处,也欢迎发送意见到邮箱进行反馈。

1 命名

一个JS框架,首先需要起一个名字,我思考再三,最终决定用我给即将出生的孩子起的名字允迪(YUNDI)来命名,取首字母,即jYD. 允迪取自 南朝·梁·任昉《为萧扬州荐荐士表》:“窃见秘书丞琅玡臣王暕,年二十一,字思晦,七叶重光,海内冠冕。神清气茂,允迪中和。”,允迪有诚实遵循的意思。

2 框架构建

为了方便后续的分模块开发,采用如下JS模式进行框架构建,此模块有私有变量和函数,有公有函数,m.方法即可以外部访问。

  1. //(C) 2017 wangming all rights reserved
  2. //email:wangmingemail@163.com
  3. var jYD = (function(m) {
  4. //private
  5. var _ver = 1.0;
  6. var _toString = Object.prototype.toString;
  7. _log = function(msg) {
  8. console.log(msg);
  9. }
  10. //public
  11. m.log = function(msg) {
  12. _log(msg);
  13. }
  14. return m;
  15. }(jYD || {}));

事件绑定,采用如下的代码段进行实现:

  1. function _on(obj, type, handle) {
  2. try { // Chrome、FireFox、Opera、Safari、IE9.0+
  3. obj.addEventListener(type, handle, false);
  4. } catch (e) {
  5. try { // IE8.0-
  6. obj.attachEvent('on' + type, handle);
  7. } catch (e) { // 早期浏览器
  8. obj['on' + type] = handle;
  9. }
  10. }
  11. var events = obj['the' + type];
  12. if (!events) {
  13. events = obj['the' + type] = [];
  14. events.push(handle);
  15. }
  16. }

方法连缀的实现,可以在方法后return this来实现:

  1. m.first = function() {
  2. for (var i = 0, e; e = _ele[i++];) {
  3. if (e.nodeType == 1)
  4. _ele = e;
  5. }
  6. return this;
  7. };
  8. m.last = function() {
  9. var len = _ele.length;
  10. for (var i = len - 1, e; e = _ele[i--];) {
  11. if (e.nodeType == 1)
  12. _ele = e;
  13. }
  14. return this;
  15. };

3 jYD使用

  1. <script src="jYD.js"></script> //引入js

Dom

  1. jYD.$("#txt2").ele().value
  2. jYD.$("#frm input").ele()
  3. jYD.$("input:checked").ele()[0].value
  4. jYD.$("input[type=text]").ele()[0].value
  5. jYD.$(".classname").ele()[0].value
  6. jYD.$(".classname").first().ele()

Form

  1. var _json = {
  2. "name3": "name3",
  3. "name6": "name6",
  4. "name7": "name7",
  5. "name2": "2017-08-08",
  6. "name1": "audi",
  7. "ajdsfa": false,
  8. "Fruit": "桃子",
  9. "fruit1": "香蕉",
  10. "hobby": ["音乐", "游泳"],
  11. };
  12. jYD.$("#frm").bindJson(_json)
  13. jYD.$("#frm").serialize() //name3=name3&name6=name6&name7=name7&name2=2017-08-08
  14. jYD.$("#frm").reset()
  15. jYD.$("input").disabled()
  16. jYD.$("select").disabled()
  17. jYD.$("button").disabled()
  18. jYD.$("input").enable()
  19. jYD.$("select").enable()
  20. jYD.$("button").enable()

Event

  1. jYD.$("#btnok").off("click").on("click", function(e) {
  2. console.log(decodeURIComponent(jYD.$("#frm").serialize()));
  3. });
  4. //custom Event
  5. var sender = jYD.$("#cediv").ele();
  6. var target = jYD.$("#btnce").ele();
  7. jYD.createCE(sender, "divbtnclick", {
  8. detail: {
  9. tag: sender,
  10. msg: "hello"
  11. }
  12.  
  13. }, target, "click");
  14. //冒泡
  15. jYD.$("#cediv").on("divbtnclick", function(e) {
  16. console.log(e);
  17. });

CSS

  1. jYD.$(".clss").addClass("red").removeClass("clss")
  2. jYD.$("#txt2").css({"backgroundColor":"#eee"});

Ajax

  1. jYD.post('/api/api3.ashx')
  2. .params(jYD.$("#frm").serialize() + "&table=22")
  3. .success(function (data) {
  4. console.log(data);
  5. }).error(function (data) {
  6. console.log("eror" + data);
  7. })
  8. .send();

Other

  1. jYD.is.Number(99)
  2. jYD.isElement(document.getElementById("frm"))
  3. jYD.is.Array([])

jYD框架使用的更多相关文章

  1. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. 旺财速啃H5框架之Bootstrap(五)

    在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...

  4. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  5. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  6. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  7. 旺财速啃H5框架之Bootstrap(四)

    上一篇<<旺财速啃H5框架之Bootstrap(三)>>已经把导航做了,接下来搭建内容框架.... 对于不规整的网页,要做成自适应就有点玩大了.... 例如下面这种版式的页面. ...

  8. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  9. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

随机推荐

  1. tomcat环境变量详细配置步骤

    这篇文章主要为大家详细介绍了tomcat环境变量配置步骤,包括JDK环境变量配置,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了tomcat环境变量的配置教程,供大家参考,具体内容如下 1.=== ...

  2. Centos 安装lnmp完整版

    1.使用putty或类似的SSH工具登录服务器: 登录后运行 screen -S lnmp 2.下载并安装LNMP一键安装包: 我是CentOS系统,所以运行: wget -c http://soft ...

  3. python数据类型内置方法 字符串和列表

    1.字符串 内置方法操作# a = 'qqssf'#1. print(a[-1:]) #按索引取,正向从0开始,反向从-1开始# print(len(a)) #取长度# a = 'qqssf'# 2. ...

  4. BZOJ4543[POI2014]Hotel加强版——长链剖分+树形DP

    题意参见BZOJ3522 n<=100000 数据范围增强了,显然之前的转移方程不行了,那么不妨换一种. 因为不能枚举根来换根DP,那么我们描述的DP方程每个点要计算三个点都在这个点的子树内的方 ...

  5. HttpClient异步调用引发的程序挂起问题排查及解决

    在搭建搭建分布式系统时,基础组件与框架的重要性不言而喻.但是如果组件出现bug,真的很要命.虽然我们通过各种单元测试,拼命找bug,但是总有一些问题被盲目自信蒙蔽了双眼,很多时候我们认为这段代码100 ...

  6. redis:消息发布与订阅频道

    1. 发布与订阅频道 消息发布与订阅像收音机与广播台的关系 1.1. publish channel message 发布频道 语法:publish channel message 作用:发布频道消息 ...

  7. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

  8. 深入理解JVM(6)——JVM性能调优实战

    如何在高性能服务器上进行JVM调优:以便充分利用高性能服务器的硬件资源,有两种JVM调优方案. 一.        采用64位操作系统,并为JVM分配大内存 分析:如果JVM中堆内存太小,那么就会频繁 ...

  9. CSS之优先级

    css的优先级 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 样式表中的特殊性描述了不同规则的相对权重,它的基本规则是: 1 内联样式表的权值最高               sty ...

  10. jQusery .基础

    1.jQusery 的基本用法 <%@ page language="java" contentType="text/html; charset=UTF-8&quo ...