在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 中的内存泄露模式
Aug 13 Javascript
JavaScript:Div层拖动效果实例代码
Aug 06 Javascript
javascript原始值和对象引用实例分析
Apr 25 Javascript
javascript封装简单实现方法
Aug 11 Javascript
AngularJS学习笔记之依赖注入详解
May 16 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
jQuery滚动监听实现商城楼梯式导航效果
Mar 06 Javascript
jQuery+CSS3实现点赞功能
Mar 13 Javascript
用node开发并发布一个cli工具的方法步骤
Jan 03 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
Dec 27 Javascript
vue页面跳转实现页面缓存操作
Jul 22 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
JQuery jsonp 使用示例代码
2009/08/12 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
select标签设置默认选中的选项方法
2018/03/02 Javascript
对node.js中render和send的用法详解
2018/05/14 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
python使用PyFetion来发送短信的例子
2014/04/22 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
基于python实现名片管理系统
2018/11/30 Python
python cumsum函数的具体使用
2019/07/29 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
python使用多线程查询数据库的实现示例
2020/08/17 Python
用python绘制樱花树
2020/10/09 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
保时捷设计:Porsche Design
2019/03/30 全球购物
创业女性典型材料
2014/05/02 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
高温慰问简报
2015/07/21 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
如何用python绘制雷达图
2021/04/24 Python
matlab xlabel位置的设置方式
2021/05/21 Python