在JavaScript中重寫jQuery對(duì)象的方法實(shí)例教程
jQuery是一個(gè)款非常優(yōu)秀的類庫,它給我們解決了很多的客戶端編程,但是任何東西都不是萬能的,當(dāng)它不能滿足我們的需求時(shí)我們就需要對(duì)它進(jìn)行重寫,同時(shí)也不要影響其原有的功能或者修改其原有的功能;比如我現(xiàn)在的web應(yīng)用程序大多數(shù)時(shí)候的數(shù)據(jù)交互都是通過Ajax來完成的,這樣就可以將一些隱藏字段的數(shù)據(jù)保存在HTML標(biāo)簽的屬性中,使HTML標(biāo)簽的代碼量減少,如:ID,Timestamp等等,這些不需要用戶輸入但又不得不提交的字段,通過表單提交的做法是
<input name="ID" value="343" type="hidden" />
把ID的值保存在一個(gè)隱藏標(biāo)簽中,然后隨表單提交。
代碼如下所示:
<div> <label data-field="id" data-property="data-id" data-id="343">First Name</label><input type="text" data-field="FirstName" /> </div>
注意藍(lán)色的部分這個(gè)屬性名稱請(qǐng)不要太在意,您完全可以取一些更簡(jiǎn)潔名字,現(xiàn)在我們來重寫jQuery的val方法來讀取和設(shè)置data-id的值,給$.prototype.val重新定義一個(gè)函數(shù),以閉包的形式將基類函數(shù)傳入,以便在新函數(shù)中調(diào)用它,看下面這段代碼:
<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;
//這里調(diào)用基類方法,當(dāng)然基類方法在何時(shí)調(diào)用或者是否要調(diào)用取決于您的業(yè)務(wù)邏輯,在這里我們是要調(diào)用的,因?yàn)橐3炙械墓δ堋?
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>
這個(gè)重寫了之后,當(dāng)在標(biāo)簽中指定了data-property屬性時(shí),jQuery對(duì)象調(diào)用val() 等同于調(diào)用attr("data-property"),但沒有指定data-property也就是默認(rèn)情況下,如果是非表單元素則是val()等同于text(),如果是表單元素則保持原來的功能也就是讀寫value屬性的值,這樣就可以通過這種方式:$("[data-field='id']").val(345)和$("[data-field='id']").val() 讀取或者設(shè)置它的值了,“data-field” 這個(gè)屬性將會(huì)映射到服務(wù)器上對(duì)應(yīng)類型的字段中,關(guān)于重寫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中重寫對(duì)象的方法</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>
希望本文所述對(duì)大家的web前段設(shè)計(jì)有所幫助。
相關(guān)文章
jQuery JSON實(shí)現(xiàn)無刷新三級(jí)聯(lián)動(dòng)實(shí)例探討
無刷新三級(jí)聯(lián)動(dòng)的實(shí)現(xiàn)方法有很多,今天將與大家討論下jQuery JSON如何實(shí)現(xiàn),感興趣的朋友們可以參考下哈2013-05-05
正負(fù)小數(shù)點(diǎn)后兩位浮點(diǎn)數(shù)實(shí)現(xiàn)原理及代碼
需要做個(gè)對(duì)兩位小數(shù)點(diǎn)的正負(fù)浮點(diǎn)數(shù)的處理要求:非數(shù)字或者.字符自動(dòng)清除,并對(duì).12自動(dòng)修補(bǔ).前的0,實(shí)現(xiàn)原理如下,感興趣的朋友可以參考下2013-09-09
基于jquery的一行代碼輕松實(shí)現(xiàn)拖動(dòng)效果
寫JS實(shí)現(xiàn)拖動(dòng)需要一大堆不便維護(hù)的代碼,實(shí)屬麻煩,Google了大半天,發(fā)現(xiàn)了一個(gè)優(yōu)秀的Jquery插件EasyDrag,只需要一行代碼便可輕松在主流瀏覽器上。2010-12-12
JQuery的read函數(shù)與js的onload不同方式實(shí)現(xiàn)
JQuery的read函數(shù)與js的onload,想必大家對(duì)這兩個(gè)方法都有所熟悉吧,接下來介紹一個(gè)實(shí)例用以上兩種方法各自實(shí)現(xiàn),感興趣的你可不要錯(cuò)過了哈,希望可以幫助到你2013-03-03
jQuery學(xué)習(xí)筆記之回調(diào)函數(shù)
回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù).這篇文章主要介紹了jQuery學(xué)習(xí)筆記之回調(diào)函數(shù)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
利用jQuery 實(shí)現(xiàn)GridView異步排序、分頁的代碼
經(jīng)常會(huì)用到j(luò)query.ui.tabs標(biāo)簽,如我們可以把備份管理放在一個(gè)頁面上,而該頁面有兩個(gè)tab分別為備份和還原,但這樣會(huì)現(xiàn)在這個(gè)頁面臃腫2010-02-02
使用prop解決一個(gè)checkbox選中后再次選中失效的問題
下面小編就為大家?guī)硪黄褂胮rop解決一個(gè)checkbox選中后再次選中失效的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
jQuery中triggerHandler()方法用法實(shí)例
這篇文章主要介紹了jQuery中triggerHandler()方法用法,實(shí)例分析了triggerHandler()方法的功能、定義及觸發(fā)被選元素的指定事件類型的使用技巧,需要的朋友可以參考下2015-01-01

