在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 动态生成方法的例子
Jul 22 Javascript
IE JS无提示关闭窗口不提示的方法
Apr 29 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
Oct 09 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
jQuery蓝色风格滑动导航栏代码分享
Aug 19 Javascript
一不小心就做错的JS闭包面试题
Nov 25 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
Sep 08 Javascript
vue-content-loader内容加载器的使用方法
Aug 05 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
Jun 06 Javascript
微信小程序收藏功能的实现代码
Jun 19 Javascript
vant实现购物车功能
Jun 29 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
使用typeof方法判断undefined类型
2014/09/09 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Python实现爬取逐浪小说的方法
2015/07/07 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
python flask中动态URL规则详解
2019/11/22 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
医学生实习自荐信
2013/10/01 职场文书
机电专业毕业生推荐信
2013/11/10 职场文书
新闻编辑求职信
2014/07/13 职场文书
党员作风建设整改方案
2014/10/27 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL