在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>

在JavaScript中重写jQuery对象的方法,布布扣,bubuko.com

时间: 2024-12-26 16:10:55

在JavaScript中重写jQuery对象的方法的相关文章

JavaScript中创建自定义对象的方法

本文内容参考JavaScript高级程序设计(第3版)第6章:面向对象的程序设计 ECMA-262中把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”我所理解的就是对象就是一个结构体,结构体中有一些它的基本属性以及对结构体处理的方法,把它们封装起来称为一个整体.JS中所有的对象都是基于一个引用类型创建,这个引用类型可以是原生类型,如Array,Date等,也可以是开发人员自定义的类型. 下面主要总结下JS中创建对象的几种模式,分析他们各自的优缺点. 1. 工厂模式 /****

Javascript 中创建自定义对象的方法(设计模式)

Javascript 中创建对象,可以有很多种方法. Object构造函数/对象字面量: 抛开设计模式不谈,使用最基本的方法,就是先调用Object构造函数创建一个对象,然后给对象添加属性. 1 var student = new Object(); 2 student.name = "xiao ming"; 3 student.age = 20; 4 student.getName = function () { 5 alert(this.name); 6 } 熟悉javascrip

javascript中的Array对象的方法

检测数组:只考虑一个全局作用域的情况下可以使用value instanceof Array 来判断一个对象是否是数组:如果要考虑多个全局的作用域,则使用Object.prototype.toString.call(value) == "[object Array]" 转换方法:toString toLocaleString  join 栈方法:(后进先出)在数组末尾插入一项,在数组末尾弹出一项.push:在数组末尾插入一项或多项,并返回现在的数组长度:pop:弹出数组最后一项,并返回.

JavaScript中的string对象及方法

string对象 string对象的两种创建 var a="hello"; var b=new String("hello"); //下面是方法 //charAt()根据下标 找字符串中的字符  alert(a.charAt(3));//根据下标返回字符串某个字符  alert(a.charAt(10));//空的,找不到这个下标 //charCodeAt()返回指定位置的字符   var a="Hello world!Hello world!"

JavaScript中关于date对象的一些方法

日期对象用于处理日期和时间. Date() - 可返回当天的日期和时间,还包含周几.时区等信息,如: Tue Jul 15 2014 16:03:46 GMT+0800 (CST) getDay() - 可返回表示星期的某一天的数字,返回值是0到6之间的一个整数,0为周日,6为周六: dateObject.getDay() getMonth()- 可返回表示月份的数字,返回值是0到11之间的一个整数,0为一月,11为12月份: dateObject.getMonth() getMilliseco

为Jquery类和Jquery对象扩展方法

jquery.fn.extend与jquery.extend jQuery为开发插件提拱了两个方法,分别是: JavaScript代码 jQuery.fn.extend(object); jQuery.extend(object); jQuery.extend(object); 为扩展jQuery类本身.为类添加新的方法. jQuery.fn.extend(object);给jQuery对象添加方法. fn 是什么东西呢.查看jQuery代码,就不难发现. JavaScript代码 jQuery

JavaScript中的String对象

String对象提供的方法用于处理字符串及字符. 常用的一些方法: charAt(index):返回字符串中index处的字符. indexOf(searchValue,[fromIndex]):该方法在字符串中寻找第一次出现的searchValue.如果给定了fromIndex,则从字符串内该位置开始搜索,当searchValue找到后,返回该串第一个字符的位置. lastIndexOf(searchValue,[fromIndex]):从字符串的尾部向前搜索searchValue,并报告找到

JavaScript中创建字典对象(dictionary)实例

这篇文章主要介绍了JavaScript中创建字典对象(dictionary)实例,本文直接给出了实现的源码,并给出了使用示例,需要的朋友可以参考下 对于JavaScript来说,其自身的Array对象仅仅是个数组,无法提供通过关键字来获取保存的数据,jQuery源码中提供了一种非常好的方式来解决这个问题,先看一下源码: 复制代码代码如下: function createCache() { var keys = []; function cache(key, value) {  // Use (k

Javascript中call方法和apply方法用法和区别

第一次在博客园上面写博客,知识因为看书的时候发现了一些有意思的知识,顺便查了一下资料,就发到博客上来了,希望对大家有点帮助. 连续几天阅读<javascript高级程序设计>这本书了,逐渐发现了以前很多自己完全没有用过甚至见过的神奇知识点.今天在阅读到有关函数的属性和方法的时候,略感高级,于是乎,查阅了不少他人的博客,在此总结一下这两个方法的以下几个方面: 1.call()和apply()的作用和用法 2.什么时候用apply(),什么时候用call() 书上提到,每个函数都包含两个非继承而来