2012-03-14 4 views
2

を照会します。それはうまくいきましたが、ここに私の問題があります:そのコードを別の要素のあるページのdivに入れたいのですが、ページに他の要素があると私が使っているコードが問題になりますセットjqueryのコンテキストは、私は私のjQueryの呼び出しがすべてのようなものに似ている空白のページにサイトを構築し

私は私のコードのすべてを通過すると(すなわち $(':checkbox') $('#container :checkbox')への)動作するように書き換えることができます実現

、私の質問は:

私は何とかすべての私のjQueryの上の呼び出しをベースにコンテキストを設定することはできますか?私はdivを作成し、divのコンテキスト内のすべてのコードを実行したいです。

私はこれを行うことができるようにしたい:

$.context('#container'); 

//the following should do the same as $('#container').find(':checkbox').blah(); 
$(':checkbox').blah() // do like $('#container').find(':checkbox').blah(); 

//this should do the same as $('<div>Stuff</div>').appendTo('#container'); 
$('<div>Stuff</div>').appendTo(document.body); 
+0

$( '#container')を使用するようにリファクタリングすることをお勧めします。コンテキストを設定することができたとしても(自分でロールしない限りそうではありません)、モジュールの外部で起こっている他の非同期jqueryの処理に干渉するので、そうしたくないかもしれません。 –

答えて

0

。 "A"($(':checkbox').blah())と "B"($('<div>Stuff</div>').appendTo(document.body);)と呼ぶものを呼んでいます。

技術的には、はい、あなたは、このように "A" を書き換えることができます。

$(':checkbox', $('#container')).blah(); 

は、説明のためにjQuery documentationを参照してください。いっそのこと、あなたの代わりに使う(?べきです)でした(と私は理由をすぐに説明します):

var context = $('#container'); 
$(':checkbox', context).blah(); 

またはただし、明示的をjQueryのを言っているの文 "B" の場合

var context = $('#container'); context.find(':checkbox').blah(); 

<div>をdocument.bodyに追加するには、document.body$('#container')とする方法がありません。誰かが巧みなやり方をしているのであれば、それは良いアイデアではありません。逆らっているので、コードを読んでいるすべての人を混乱させます(あなたから、何か)。

ずっと、ずっとより良い方法はそうのように、一時的な変数にあなたの「コンテキスト」を格納することです:

var context = $('#container'); 
context.find(':checkbox').blah(); 
context.append('<div>Stuff</div>'); 

あなたはすべての場所で使用され、このパターンが表示されます。これは、コードの入力、コードの読み取り、コードサイズ、実行速度、キャッシュの使用率、および自己文書化など、重要なすべての措置によって、「最小限のオーバーヘッド」ソリューションを実現します。

0

現在のjQueryのAPIには、このようなcontext機能はありません。

  • ようにする場合はthisはそれを尋ねるための場所である、jQueryのには、この新しい機能を提案
  • ...プラグインを作成することができます。
+0

はい、少なくともOPの最初のステートメント( '$( ':checkbox')。blah()')はありますが、追加の引数はありません。 http://api.jquery.com/jQuery/を参照してください。 –

+0

@Chris。彼はセレクタについて質問しませんでした。彼は "_additional argument_"を含めたくないです。 – gdoron

0

いいえ、とにかく行うべきではありません。それはあなたのコードを非常に混乱させます。

それは変数にコンテキストを置くためのオーバーヘッドの多くではありません。

var c = $('#container'); 

c.children(':checkbox').blash(); 
c.children('<div>Stuff</div>').appendTo(document.body); 
+0

これはまったく動作しません。 – qwertymk

+1

私はあなたが 'c。(...)'を意味すると思います。 ..) '。 –

+1

私はダンプをしました。一定。 – Deestan

0

私はjQueryのを返す関数を返すためにカレーを使用します。

function makeContext(containerSelector){ 
    var jContext = $(containerSelector); 
    return function (newQuery){ 
     return jContext.find(newQuery); 
    } 
} 

var context = makeContext('#container'); 
context(':checkbox').blah(); 

//or if you prefer 

$.context = makeContext('#container'); 
$.context(':checkbox').blah(); 

次に、あなたのコンテキストを設定して検索を行うと、コードの関連部分での「$」のために置き換えると「コンテキスト」で置き換えることができます。 jQueryにルートコンテキスト関数があった場合、必要なときにどのようにコンテキストをエスケープするのですか?

Plusは、コントロールの更新と同様に複数のコンテキストを持つことができますこの方法:次の2つの文を持っている

var homeContext = makeContext('#homeElement'); 
var aboutContext = makeContext('#aboutElement'); 

//multiple context's living together 
homeContext(':checkbox').blah(); 
aboutContext(':checkbox').foo(); 

//change context meaning later 
homeContext = makeContext('home2Element'); 
homeContext(':checkbox').blah(); 
関連する問題