在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 相关文章推荐
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
Oct 20 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
Nov 04 Javascript
jquery通过name属性取值的简单实现方法
Jun 20 Javascript
基于jQuery实现火焰灯效果导航菜单
Jan 04 Javascript
用move.js库实现百叶窗特效
Feb 08 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
基于node下的http小爬虫的示例代码
Jan 11 Javascript
微信小程序实现全局搜索代码高亮的示例
Mar 30 Javascript
JQuery元素快速查找与操作
Apr 22 jQuery
vue双向绑定数据限制长度的方法
Nov 04 Javascript
vue 实现一个简单的全局调用弹窗案例
Sep 10 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
一个支持任意尺寸的图片上下左右滑动效果
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 session处理的定制
2009/03/16 PHP
php读取excel文件示例分享(更新修改excel)
2014/02/27 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
mouse_on_title.js
2006/08/25 Javascript
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
JavaScript事件处理器中的event参数使用介绍
2013/05/24 Javascript
js中的this关键字详解
2013/09/25 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
js实现网页收藏功能
2015/12/17 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
Python反射的用法实例分析
2018/02/11 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
计算机学生求职信范文
2014/01/30 职场文书
五年级英语教学反思
2014/01/31 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
python热力图实现的完整实例
2022/06/25 Python