jQuery は、クライアント側のプログラミングの多くを解決してくれる非常に優れたクラス ライブラリですが、ニーズを満たせない場合には、書き換える必要があります。その本来の機能、たとえば、現在の Web アプリケーションのほとんどのデータ対話は Ajax を通じて完了するため、一部の非表示フィールド データを HTML タグに保存できるようになり、HTML タグ内のコードの量が削減されます。 : ID、タイムスタンプなど。ユーザー入力は必要ありませんが、送信する必要があるこれらのフィールドは、フォーム
を通じて送信されます。<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>
この属性名の青色の部分にはあまり注意を払わないでください。もう少し簡潔な名前を選択して、data-id の値を $.prototype に設定するように書き換えてみましょう。関数を再定義し、新しい関数で呼び出せるように基本クラス関数をクロージャの形式で渡します。次のコードを参照してください。
<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>
すべてのコードは次のとおりです:
<!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>