JavaScript_jquery での jQuery オブジェクト メソッドのオーバーライドに関するサンプル チュートリアル

WBOY
リリース: 2016-05-16 16:38:45
オリジナル
1206 人が閲覧しました

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 &#63; 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 &#63; s : v; }
        }
        
      }
      //在这里传入基类方法
    }($.prototype.val);
</script>

ログイン後にコピー
この書き換え後、タグで data-property 属性が指定されている場合、jQuery オブジェクトで val() を呼び出すことは attr("data-property") を呼び出すことと同じですが、data-property は指定されていません。デフォルト 、非 form 要素の場合、 val() は text() と同等です。 form 要素の場合、 value 属性の値の読み取りと書き込みという元の機能が維持されるため、 $("[data-field= 'id']").val(345) および $("[data-field='id']").val() メソッドは、その値を読み取るか設定します。 「data-field」属性は、サーバー上の対応する型のフィールドにマッピングされます。これは、JavaScript で jQuery を書き換える方法です。他のメソッドの書き換えでも同様の効果があるため、1 つの例から推測できます。

すべてのコードは次のとおりです:

<!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 &#63; 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 &#63; 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 フロントエンド設計に役立つことを願っています。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート