在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下利用fso判断文件是否存在的代码
Dec 11 Javascript
JS控件的生命周期介绍
Oct 22 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
Feb 06 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
点击显示指定元素隐藏其他同辈元素的方法
Feb 19 Javascript
js由下向上不断上升冒气泡效果实例
May 07 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
Jan 07 Javascript
AngularJs表单验证实例详解
May 30 Javascript
JavaScript Uploadify文件上传实例
Feb 28 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
angularJs中$http获取后台数据的实例讲解
Aug 08 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
Aug 23 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 数组实例说明
2008/08/18 PHP
超级简单的php+mysql留言本源码
2009/11/11 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
php项目中百度 UEditor 简单安装调试和调用
2015/07/15 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
JS 修改URL参数(实现代码)
2013/07/08 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
js中this的用法实例分析
2015/01/10 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
Python 正则表达式入门(初级篇)
2016/12/07 Python
python机器学习库常用汇总
2017/11/15 Python
python 处理string到hex脚本的方法
2018/10/26 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
django列表筛选功能的实现代码
2020/03/27 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
中职生自我鉴定范文
2013/10/03 职场文书
英文自荐信格式
2013/11/28 职场文书
车间班组长的职责
2013/12/13 职场文书
网络优化专员求职信
2014/05/04 职场文书
林肯就职演讲稿
2014/05/19 职场文书
毕业生求职信范文
2014/06/29 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
2015年仓库工作总结
2015/04/09 职场文书