在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 图片预览效果 推荐
Dec 22 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
JS实现简易图片轮播效果的方法
Mar 25 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
Oct 23 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
Node.js 数据加密传输浅析
Nov 16 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
Dec 20 Javascript
vue中eslintrc.js配置最详细介绍
Dec 21 Javascript
实例讲解v-if和v-show的区别
Jan 31 Javascript
swiper自定义分页器的样式
Sep 14 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 Javascript
jQuery实现tab栏切换效果
Dec 22 jQuery
一个支持任意尺寸的图片上下左右滑动效果
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
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
基于jquery实现的可编辑下拉框实现代码
2014/08/02 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
python中执行shell命令的几个方法小结
2014/09/18 Python
Python简单进程锁代码实例
2015/04/27 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
会计专业毕业生自荐信范文
2013/12/20 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
幼儿生日活动方案
2014/08/27 职场文书
模范班主任事迹材料
2014/12/17 职场文书
个人委托函范文
2015/01/29 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android