在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 更新 JavaScript 数组的 uniq 方法
Jan 23 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
Aug 05 Javascript
jquery中ajax调用json数据的使用说明
Mar 17 Javascript
JavaScript学习笔记(一) js基本语法
Oct 25 Javascript
js动态给table添加/删除tr的方法
Aug 02 Javascript
js+div实现图片滚动效果代码
Feb 10 Javascript
JS对文本框值的判断示例
Mar 10 Javascript
jquery mobile界面数据刷新的实现方法
May 28 Javascript
浅谈jQuery为哪般去掉了浏览器检测
Aug 29 Javascript
node之本地服务器图片上传的方法示例
Mar 26 Javascript
js前端面试之同步与异步问题详解
Apr 03 Javascript
详解Vue路由自动注入实践
Apr 17 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP session有效期问题
2009/04/26 PHP
php小偷相关截取函数备忘
2010/11/28 PHP
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
Knockout数组(observable)使用详解示例
2013/11/15 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
python中遍历文件的3个方法
2014/09/02 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
浅谈python迭代器
2017/11/08 Python
解决python删除文件的权限错误问题
2018/04/24 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
python 调整图片亮度的示例
2020/12/03 Python
python中time、datetime模块的使用
2020/12/14 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
电子专业毕业生自我鉴定
2014/01/22 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
单位消防安全责任书
2014/07/23 职场文书
国庆节活动总结
2014/08/26 职场文书
公司股东合作协议书
2014/09/14 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2016自主招生校长推荐信范文
2015/03/23 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
浅谈怎么给Python添加类型标注
2021/06/08 Python