在JavaScript中重写jQuery对象的方法实例教程

 更新时间:2014年08月25日 09:14:24   投稿:shichen2014  
这篇文章主要介绍了在JavaScript中重写jQuery对象的方法,在某些情况下jQuery无法满足应用开发的时候可以采用javascript重写jQuery方法来满足功能的实现,需要的朋友可以参考下

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前段设计有所帮助。

相关文章

  • jQuery JSON实现无刷新三级联动实例探讨

    jQuery JSON实现无刷新三级联动实例探讨

    无刷新三级联动的实现方法有很多,今天将与大家讨论下jQuery JSON如何实现,感兴趣的朋友们可以参考下哈
    2013-05-05
  • 360提示[高危]使用存在漏洞的JQuery版本的解决方法

    360提示[高危]使用存在漏洞的JQuery版本的解决方法

    今天用360检测网站,提示高危]使用存在漏洞的JQuery版本,说是这个文件有问题jquery.min.js,这里脚本之家小编就为大家分享一下解决方法
    2017-10-10
  • 正负小数点后两位浮点数实现原理及代码

    正负小数点后两位浮点数实现原理及代码

    需要做个对两位小数点的正负浮点数的处理要求:非数字或者.字符自动清除,并对.12自动修补.前的0,实现原理如下,感兴趣的朋友可以参考下
    2013-09-09
  • 基于jquery的一行代码轻松实现拖动效果

    基于jquery的一行代码轻松实现拖动效果

    写JS实现拖动需要一大堆不便维护的代码,实属麻烦,Google了大半天,发现了一个优秀的Jquery插件EasyDrag,只需要一行代码便可轻松在主流浏览器上。
    2010-12-12
  • JQuery的read函数与js的onload不同方式实现

    JQuery的read函数与js的onload不同方式实现

    JQuery的read函数与js的onload,想必大家对这两个方法都有所熟悉吧,接下来介绍一个实例用以上两种方法各自实现,感兴趣的你可不要错过了哈,希望可以帮助到你
    2013-03-03
  • jQuery学习笔记之回调函数

    jQuery学习笔记之回调函数

    回调函数就是一个通过函数指针调用的函数.这篇文章主要介绍了jQuery学习笔记之回调函数的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • 利用jQuery 实现GridView异步排序、分页的代码

    利用jQuery 实现GridView异步排序、分页的代码

    经常会用到jquery.ui.tabs标签,如我们可以把备份管理放在一个页面上,而该页面有两个tab分别为备份和还原,但这样会现在这个页面臃肿
    2010-02-02
  • 使用prop解决一个checkbox选中后再次选中失效的问题

    使用prop解决一个checkbox选中后再次选中失效的问题

    下面小编就为大家带来一篇使用prop解决一个checkbox选中后再次选中失效的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • jQuery中triggerHandler()方法用法实例

    jQuery中triggerHandler()方法用法实例

    这篇文章主要介绍了jQuery中triggerHandler()方法用法,实例分析了triggerHandler()方法的功能、定义及触发被选元素的指定事件类型的使用技巧,需要的朋友可以参考下
    2015-01-01
  • 深入学习jQuery中的data()

    深入学习jQuery中的data()

    大家应该都会有这样一种感觉,data函数在jQuery中看起来很不起眼, 就像沙滩上一颗平凡的沙子, 但仔细一瞅, 却惊讶的发现data是jQuery中无比重要的一环, 甚至jQuery中各种事件都基于此。下面就来详细深入的学习下jQuery中的data(),感兴趣的朋友们可以参考借鉴。
    2016-12-12

最新评论