在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 Ext JS 状态默认存储时间
Feb 15 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 Javascript
js/jquery解析json和数组格式的方法详解
Jan 09 Javascript
JavaScript中利用各种循环进行遍历的方式总结
Nov 10 Javascript
js实现新年倒计时效果
Dec 10 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
Mar 05 Javascript
js学习阶段总结(必看篇)
Jun 16 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
Mar 01 Javascript
vue组件实现文字居中对齐的方法
Aug 23 Javascript
详解Vue依赖收集引发的问题
Apr 22 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 Javascript
OpenLayers3实现测量功能
Sep 25 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
PHP中的CMS的涵义
2007/03/11 PHP
php 常用字符串函数总结
2008/03/15 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
use jscript List Installed Software
2007/06/11 Javascript
表单元素事件 (Form Element Events)
2009/07/17 Javascript
js自定义事件代码说明
2011/01/31 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
jquery.validate表单验证插件使用详解
2017/06/21 jQuery
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
python破解同事的压缩包密码
2020/10/14 Python
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
大门门卫岗位职责
2013/11/30 职场文书
校园网站的创业计划书范文
2013/12/30 职场文书
酒鬼酒广告词
2014/03/21 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
记账会计岗位职责
2014/06/16 职场文书
法制教育演讲稿
2014/09/10 职场文书
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python
基于Python实现对比Exce的工具
2022/04/07 Python
PyTorch中permute的使用方法
2022/04/26 Python