-1
(function($) {
  return $.extend($.fn, {
    link: function(o) {
      return $(this).find(":input").each(function() {
        var el, name;
        el = $(this);
        name = el.attr("name");
        o.bind("change:" + name, function() {
          // do stuff
        });
        return $(this).bind("change", function() {
          // do stuff
        });
      });
    }
  });
})(jQuery);

他の関数の中にたくさんの関数があります。私の主な質問(4は、このコードを理解することで理解しようとしていることです):

  1. $.fn を拡張してその値を返すとはどういう意味ですか?
  2. このコードはどのような順序で実行されますか? 各ループの最初の行として console.log を配置すると、実行されたことがわかりませんが、「//do stuff」セクションに配置すると表示されます。
  3. each ステートメント内で $(this).find(":input") の値を見ると、現在ループしている要素の値がわかりますか?
  4. ":input" を "p" に変更しようとしましたが、まだ入力要素の "//do stuff" ブロックに入っています。セレクターを変更して .filter または .not を追加しても、「//do stuff」ブロックに入ると、そうすべきではないと思うのに中断します。これは、すべてが実行される順序に基づいて予想されることですか?の?要素が特定のクラスを持っている場合にのみ「//処理」したい場合はどうなりますか?
4

4 に答える 4

0

$変数です。の短い変数、またはエイリアスですjQuery。これは単純に、jQuery オブジェクトへの参照です。つまり、次のようになります。

var jQuery = { ... //All the jQuery code };
var $ = jQuery; //Where jQuery is a variable that contains the jQuery object.

つまり、$.fnあなたが見ているのは jQuery オブジェクトのfnプロパティを見ているということです。これは別のオブジェクトです。

$.extend(...)すべての引数を 1 つのオブジェクトに結合する jQuery のメソッドです。

したがって、オブジェクトを取得し$.fn、それを上記のコードの 2 番目のパラメーターであるオブジェクトと組み合わせています。

{
    link: function(o) {
      return $(this).find(":input").each(function() {
        var el, name;
        el = $(this);
        name = el.attr("name");
        o.bind("change:" + name, function() {
          // do stuff
        });
        return $(this).bind("change", function() {
          // do stuff
        });
      });
    }
}

次に、その新しい結合されたオブジェクトを返します。


コード全体がクロージャと呼ばれるもの、またはこの場合は自己実行関数にラップされます。これは、匿名関数を定義し、その関数をすぐに実行するように指示したためです。

匿名関数は次のとおりです。

var anonFunction = function() { alert("hi"); };

今、あなたがするなら:

anonFunction();

その関数を実行すると、"hi" アラートが表示されます。

自己実行型の無名関数はこれを受け取り、自分自身を括弧で囲むことで自分自身を呼び出します。

(function() { alert("hi"); })(); //Replace everything between the first set of `()` with `anonFunction` and you have the same thing as the last code example.
于 2013-07-01T21:05:47.913 に答える
0

.extend() の jQuery API は次のとおりです。

$.extend() または jQuery.extend()

  1. コードは、リストされている順序で実行されます。
  2. おそらくここでやりたいことは、このオブジェクトconsole.log(this);全体のダンプになるはずです。
  3. 実際には// do stuff、変更イベントを要素のnameにバインドしています。

スクリプトを小さな部分に分解して、それぞれがそれぞれのループ構造の外で何をしているのかを調べてみませんか。学ぶための最良の方法は、それをいじることです!

于 2013-07-01T21:07:14.320 に答える