在JavaScript中重寫jQuery對象的方法實例教程
jQuery是一個款非常優(yōu)秀的類庫,它給我們解決了很多的客戶端編程,但是任何東西都不是萬能的,當(dāng)它不能滿足我們的需求時我們就需要對它進行重寫,同時也不要影響其原有的功能或者修改其原有的功能;比如我現(xiàn)在的web應(yīng)用程序大多數(shù)時候的數(shù)據(jù)交互都是通過Ajax來完成的,這樣就可以將一些隱藏字段的數(shù)據(jù)保存在HTML標(biāo)簽的屬性中,使HTML標(biāo)簽的代碼量減少,如:ID,Timestamp等等,這些不需要用戶輸入但又不得不提交的字段,通過表單提交的做法是
<input name="ID" value="343" type="hidden" />
把ID的值保存在一個隱藏標(biāo)簽中,然后隨表單提交。
代碼如下所示:
<div> <label data-field="id" data-property="data-id" data-id="343">First Name</label><input type="text" data-field="FirstName" /> </div>
注意藍色的部分這個屬性名稱請不要太在意,您完全可以取一些更簡潔名字,現(xiàn)在我們來重寫jQuery的val方法來讀取和設(shè)置data-id的值,給$.prototype.val重新定義一個函數(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)然基類方法在何時調(diào)用或者是否要調(diào)用取決于您的業(yè)務(wù)邏輯,在這里我們是要調(diào)用的,因為要保持它原有的功能。 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>
這個重寫了之后,當(dāng)在標(biāo)簽中指定了data-property屬性時,jQuery對象調(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” 這個屬性將會映射到服務(wù)器上對應(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中重寫對象的方法</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前段設(shè)計有所幫助。
相關(guān)文章
在一個頁面實現(xiàn)兩個zTree聯(lián)動的方法
最近發(fā)現(xiàn)項目中很多地方都是樹形菜單,而這些樹形菜單都是使用樹形插件zTree來制作的,下面這篇文章主要給大家介紹了關(guān)于在一個頁面實現(xiàn)兩個zTree聯(lián)動的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12jQuery實現(xiàn)動態(tài)表單驗證時文本框抖動效果完整實例
這篇文章主要介紹了jQuery實現(xiàn)動態(tài)表單驗證時文本框抖動效果,可實現(xiàn)表單元素左右晃動的抖動功能,涉及jquery中元素的匹配與動畫animate效果實現(xiàn)技巧,需要的朋友可以參考下2015-08-08jQuery基于cookie實現(xiàn)的購物車實例分析
這篇文章主要介紹了jQuery基于cookie實現(xiàn)購物車的方法,結(jié)合實例形式簡單分析了jQuery基于cookie實現(xiàn)針對商品信息的購物車存儲功能,具有一定參考借鑒價值,需要的朋友可以參考下2015-12-12JQuery與Ajax調(diào)用新浪API獲取短網(wǎng)址的代碼
這篇文章主要介紹了調(diào)用新浪API獲取短網(wǎng)址的方法有很多,本例為大家介紹下使用JQuery與Ajax來實現(xiàn),需要的朋友可以參考下2014-02-02