在JavaScript中重写jQuery对象的方法实例教程


Posted in Javascript onAugust 25, 2014

jQuery是一个款非常优秀的类库,它给我们解决了很多的客户端编程,但是任何东西都不是万能的,当它不能满足我们的需求时我们就需要对它进行重写,同时也不要影响其原有的功能或者修改其原有的功能;比如我现在的web应用程序大多数时候的数据交互都是通过Ajax来完成的,这样就可以将一些隐藏字段的数据保存在HTML标签的属性中,使HTML标签的代码量减少,如:ID,Timestamp等等,这些不需要用户输入但又不得不提交的字段,通过表单提交的做法是

<input name="ID" value="343" type="hidden" />

把ID的值保存在一个隐藏标签中,然后随表单提交。

代码如下所示:

<div>
<label data-field="id" data-property="data-id" data-id="343">First Name</label><input type="text" data-field="FirstName" />
</div>

注意蓝色的部分这个属性名称请不要太在意,您完全可以取一些更简洁名字,现在我们来重写jQuery的val方法来读取和设置data-id的值,给$.prototype.val重新定义一个函数,以闭包的形式将基类函数传入,以便在新函数中调用它,看下面这段代码:

<script>
    $.prototype.val = function (base) {
      return function () {
        var s = this, a = "data-property", p = s.attr(a), isset = arguments.length > 0, v = isset ? arguments[0] : null;



 //这里调用基类方法,当然基类方法在何时调用或者是否要调用取决于您的业务逻辑,在这里我们是要调用的,因为要保持它原有的功能。
        if (isset&&typeof(base)=="function") { base.call(s, v); } else { v = base.call(s); }
        if (p) {
          if (isset) { s.attr(p, v); return s }
          else { return s.attr(p) }
        }
        else {
          if (!s.is(":input"))
          { if (isset) { s.text(v); return s; } else { return s.text(); } }
          else { return isset ? s : v; }
        }
        
      }



//在这里传入基类方法
    }($.prototype.val);
</script>

 这个重写了之后,当在标签中指定了data-property属性时,jQuery对象调用val() 等同于调用attr("data-property"),但没有指定data-property也就是默认情况下,如果是非表单元素则是val()等同于text(),如果是表单元素则保持原来的功能也就是读写value属性的值,这样就可以通过这种方式:$("[data-field='id']").val(345)和$("[data-field='id']").val() 读取或者设置它的值了,“data-field” 这个属性将会映射到服务器上对应类型的字段中,关于重写JavaScript中的jQuery的方法就到这里了,其他方法的重写是异曲同工的,大家可以举一反三的思考。

全部代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title>在JavaScript中重写对象的方法</title>
  <script src="Scripts/jquery-1.8.2.min.js"></script>
  <script src="Scripts/jquery-ui-1.8.24.min.js"></script>
  <script>
    $.prototype.val = function (base) {
      return function () {
        var s = this, a = "data-property", p = s.attr(a), isset = arguments.length > 0, v = isset ? arguments[0] : null;
        if (isset&&typeof(base)=="function") { base.call(s, v); } else { v = base.call(s); }
        if (p) {
          if (isset) { s.attr(p, v); return s }
          else { return s.attr(p) }
        }
        else {
          if (!s.is(":input"))
          { if (isset) { s.text(v); return s; } else { return s.text(); } }
          else { return isset ? s : v; }
        }
      }
    }($.prototype.val);
  </script>
</head>
<body>
  <span id="lbl">Hello world!</span>
  <input type="text" id="txt" value="hello world" />
  <input type="checkbox" value="哈哈哈。。。" />
</body>
</html>

希望本文所述对大家的web前段设计有所帮助。

Javascript 相关文章推荐
推荐一些非常不错的javascript学习资源站点
Aug 29 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
Oct 08 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
Jan 15 Javascript
jQuery取得设置清空select选择的文本与值
Jul 08 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
Jun 16 Javascript
纯javascript实现自动发送邮件
Oct 21 Javascript
JavaScript中cookie工具函数封装的示例代码
Oct 11 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
Oct 24 Javascript
微信小程序实现tab切换效果
Nov 21 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
scrapyd schedule.json setting 传入多个值问题
Aug 07 Javascript
JS数组reduce()方法原理及使用技巧解析
Jul 14 Javascript
一个支持任意尺寸的图片上下左右滑动效果
Aug 24 #Javascript
jquery 取子节点及当前节点属性值的方法
Aug 24 #Javascript
在JS数组特定索引处指定位置插入元素的技巧
Aug 24 #Javascript
js获取checkbox复选框选中的选项实例
Aug 24 #Javascript
jQuery异步加载数据并添加事件示例
Aug 24 #Javascript
Jquery通过JSON字符串创建JSON对象
Aug 24 #Javascript
Jquery中扩展方法extend使用技巧
Aug 24 #Javascript
You might like
php Memcache 中实现消息队列
2009/11/24 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
php下Memcached入门实例解析
2015/01/05 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
JS常用跨域方法实现原理解析
2020/12/09 Javascript
python中的多线程实例教程
2014/08/27 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
tensorflow如何批量读取图片
2019/08/29 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
大学四年的个人自我评价
2014/01/14 职场文书
美容院考勤制度
2014/01/30 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
协议书的格式
2014/04/23 职场文书
城管大队整治方案
2014/05/06 职场文书
关于责任的演讲稿
2014/05/20 职场文书
旅游文化节策划方案
2014/06/06 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
酒店收银员岗位职责
2015/04/07 职场文书