2009-12-09 7 views
15

JQueryを使用して:

時々、私はvariable.val()を行うことができ、それは動作します。場合によっては$(variable).val()を使用する必要があります。

私は試行錯誤なしに選択をしたいと思っています。

誰かが、いつオブジェクトを$()でラップするかをJQueryを使用して知っていますか?

答えて

13

DOMオブジェクトを$()で囲むと、jQueryラップされたセット要素に変換されます。この方法で、val()、attr()、show()、hide()、serialize())を使ってjQueryメソッドを呼び出すことができます。

ただし、純粋なjavascriptプロパティを取得または設定する必要がある場合は、それをラップしないでください。

+2

...変数が既にjQueryセレクタの結果であったJQueryオブジェクトでない限り:)おそらく、これはval()を直接呼び出すときです。 – Slavo

4

誰もが、$()でオブジェクトをラップするときを知っていますか?

ポイント:obj instanceof jQueryがfalseを返す。これは多くの場合thisとメソッド引数の場合です(メソッドが文書化されていない限り、引数がjQueryオブジェクトでなければならない)。

したがって、thisがあり、jQuery関数が必要な場合は、それをラップする必要があります。例えば。あなたはその引数が必ずしもjQueryの要素ではありません、あなたは彼らがしていることを確実にする機能を持っている場合

function() { 
    $this = $(this); 
    $this.val(); 
} 

はまた、あなたは最初にそれをラップする必要があります。例えば。

function(e) { 
    e = $(e); 
    e.val(); 
} 

jQuery要素を巻き戻しても問題ありません。

0

jQueryの学習の冒頭で、変数がすでにラップされているかどうかを調べることは、しばしば試行錯誤です。たとえば、イベント関数では、this変数はjQueryオブジェクトではありません。また、jQueryオブジェクトを再ラップするのは危険ではないと私は信じています。

将来的に多くのjQueryコードを書いていくうちに、すぐに折り返し時に、またそうでないときに気づくはずなので、心配する必要はありません。

0

イベントハンドラがある場合、val3を取得する必要があります。elemはラップされていませんが、下の例ではelem.valueとすることができます。

$('#someid').bind('click', function(e) { 
    var elem = e.currentTarget; 
} 

要素をセレクタで使用できない場合は、おそらくラップする必要があります。

本当に必要な場合は、ラップされた要素を返すユーティリティ関数を使用するだけで、常にラップされます。

jQueryオブジェクトであるかどうかを確認し、ラップしない場合は常にラップされたバージョンを返します。

0

は、DOM要素を受け取り、jQueryオブジェクトを作成します。 jQueryオブジェクトではなくDOMオブジェクトで終わるときはいつでもそれを使用する必要があります。

あなたはDOMオブジェクトは次のようになり得るだろう最も可能性の理由:

  1. イベント - あなたはjQueryの中で(クリックのような)に結合いずれにせよ、this変数と、すべてのイベントの引数は、DOMオブジェクトを参照します(jQueryオブジェクトではありません)。
  2. 非jQuery javascript - コードの一部にまだdocument.getElementByIdを使用している場合(何らかのレガシーなjavascriptがある場合、または何らかの理由でjQueryプラグインではないサードパーティのライブラリを参照している場合と同様)、これらはDOMオブジェクトになりますラップする必要があります。

ありしかし害は、それはあなたがそれをどのように使用するかによって、DOMオブジェクトの推測かもしれない誰かに難読化を超えて、すでにjQueryオブジェクトである$(variable)variable場合の呼び出しではありません、あなたは常にDOMオブジェクトに戻って取得することができます$(variable)[0]に電話してください。

6

は、単に$(variable)を入れて(あなたがsomethingにjQueryのメソッドを使用する場合)は、常に$(something)を使用しても害はありません