$(this)を理解するのに助けが必要です。括弧内の「this」の焦点を狭めることは可能ですか、それとも「this」は他の属性の使用を排除しますか?
例:このコードがなぜかわかりません:
$(this).children("div")
このように書き直すことはできません:
$(this +" div")
次のようなものに頼る必要はありません:
$('#'+$(this).attr("id")+" div")
また、JQueryのドキュメントで「これ」を指摘してもらえますか?明らかな理由から、「this」を検索語として使用することは困難です。
this
はjQueryの「もの」ではなく、 基本的なJavaScriptのもの です。オブジェクト、特にDOM要素またはjQueryオブジェクト(現在のコンテキストに応じて)であるため、例のように書き直すことはできません。したがって、これを行った場合:
_ $(this + " div")
_
あなたが本当にやっていることは、 .toString()
on this
文字列を連結すると、次のようになります。
_ $("[object Object] div")
_
....これは有効なセレクターではありません。
さらに読むことに関しては、 この記事 はthis
(コンテキストキーワード)が何を意味するかを学ぶための最良の参考資料/リソースの1つであり続けると思います。
コメントリクエストごとに、さまざまな場所にあるthis
の例をいくつか示します。
$("selector").click(function() { alert(this); });
this
は、イベントハンドラーがトリガーされるDOM要素を指します。$.fn.myPlugin = function() { alert(this); });
this
は、プラグインが呼び出された/チェーンされたjQueryオブジェクトです。例:$("selector").myPlugin();
、this
は$("selector")
jQueryオブジェクトです。function myFunc() { alert(this); };
this
は、オブジェクトであろうと他の何かであろうと、現在のコンテキストです。いくつかの例を示します。$("selector").click(myFunc);
--this
は、上記のようにDOM要素です$("selector").click(function() { myFunc(); });
--this
はグローバルコンテンツ、window
myFunc.call(whatThisIs, arg1, arg2);
--this
はwhatThisIs
Function.call()
および Function.apply()
を参照してください。.find()
を使用します
_$( this ).find( 'div' )
_
または、context
パラメータを使用して jQuery( selector, context )
(内部的には、とにかくfindを呼び出すだけです...)
_$( 'div', this )
_
まず、thisとは何かを理解する必要があります。これは、コンテキストによって異なります。 $関数を呼び出すと、jQueryオブジェクトが返されます。
$(this).children("div")
これは、特定のオブジェクトから、すべての子を取得することを意味します。以下のリンクを参照してください: http://jsfiddle.net/vietean/f2Yrg/
this
は、cssセレクターを表す文字列ではありません(div
、#my_id
または.my_class
など)。
jQuery関数の引数としてthis
を渡すと、現在の要素(これが参照するもの)に基づいてjQueryオブジェクトが返されるため、$(this + selector)
のようなものは使用できません。 。
あなたはこれを見ることができます: http://api.jquery.com/each/
基本的に、this
は、コールバックが参照しているDOM要素です。要素に文字列を追加しているため、$(this + " div")
を実行することはできません。最初に、3番目のコードスニペットのようにIDを取得する必要があります。
ちなみに、$(this).children("div")
は$('#'+$(this).attr("id")+" div")
と同じではありません
まず、this
にIDがない可能性があります。その場合、2番目の方法はまったく機能しません。また、IDがある場合でも、その2番目のコードは実際には$(this).find("div")
です。あなたが子供が欲しいならあなただけがしなければなりません:
$('#'+$(this).attr("id") + " > div")