在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开发技术大全-第3章 js数据类型
Jul 03 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
Dec 13 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
Oct 14 Javascript
JQuery悬停控制图片轮播——代码简单
Aug 05 Javascript
理解javascript中的严格模式
Feb 01 Javascript
JavaScript中自带的 reduce()方法使用示例详解
Aug 10 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
Dec 01 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
Jan 04 Javascript
mpvue实现左侧导航与右侧内容的联动
Oct 21 Javascript
js前端如何写一个精确的倒计时代码
Oct 25 Javascript
javascript实现异形滚动轮播
Nov 28 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 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
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
PHP实现图片压缩
2020/09/09 PHP
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
JsRender实用入门教程
2014/10/31 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python中extend和append的区别讲解
2019/01/24 Python
python仿抖音表白神器
2019/04/08 Python
python列表每个元素同增同减和列表元素去空格的实例
2019/07/20 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
小学数学课后反思
2014/04/23 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
学生会竞选演讲稿学习部
2014/08/25 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
读后感作文评语
2014/12/25 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书