次のようなセクションを持つテーブルがあります。
<tr>
<td> <span class="myclass"></span>
</td>
<tr>
$(this)はtr要素に設定されており、「myclass」クラスが設定されているSpan要素にアクセスしようとしています。以下はうまくいくようです:
if ($(this).children('td').children('span').is('.myclass')){
alert('in here');
}
しかし、これを使用しようとすると:
if ($(this).children("td > span").is('.myclass')){
またはこれ:
if ($(this).children("td span").is('.myclass')){
ありません。上記の2つの方法のいずれかで(異なる方法ではあるものの)同様の結果が得られると思いましたが、明らかにそうではありませんでした。
ここで何が欠けていますか?
ありがとう!
children(selector)
は、selector
に一致する子にのみ一致します。 tr
にはtd
の子要素がなく、tr
sと_td > span
_しかないため、span
の子(td
s)は_td > span !== td
_に一致できません。
documentation もこれについては非常に明確です。
一致した要素のセット内の各要素の子を取得します。オプションでセレクターでフィルターできます。
代わりに必要なのは .find()
です。
_$(this).find("td > span")
_
セレクターに一致する、子だけでなくすべての子孫を返します。
JQueryドキュメントから:
「.find()メソッドと.children()メソッドは似ていますが、後者はDOMツリーの1レベル下を移動するだけです。」
私はこれを使用することをお勧めします:
if ($(this).find('.myclass').length){
alert('in here');
}
乾杯
私はこれを説明しました ここ 。
違いは、最初のセレクターは完全にchildren
呼び出し内にあるのに対し、2番目のセレクターはそうではないということです。
したがって、最初のものはthis
のすべての子を探します。これはtd > span
にも一致します。 (言い換えれば、すべて{<span>
s <td>
sの子}(セレクタ)それ自体がthis
の直接の子です)
2番目のものは、this
のすべての<td>
子を検索し、それらの<span>
s内のすべての<td>
sを検索します。