通常のシズルセレクターを使用してjQueryで何かを正しく選択できないという奇妙な問題があります。
これらの 2 つの行は同じことを行いません。
ele.children("div.a > div").addClass("badActive");
ele.children("div.b").children("div").addClass("active");
通常のシズルセレクターを使用してjQueryで何かを正しく選択できないという奇妙な問題があります。
これらの 2 つの行は同じことを行いません。
ele.children("div.a > div").addClass("badActive");
ele.children("div.b").children("div").addClass("active");
ele.children("div.a > div")
(コンビネータからの) 要素と(呼び出しからの)div
両方のdiv.a
要素の子であるを選択します。また、それ自体が要素を表すことも意味します。>
ele
.children()
ele
div.a
ele.children("div.b").children("div")
div
要素の子でありdiv.b
、それ自体が の子である を選択しele
ます。ele
それ自体はどのような種類の要素でもかまいませんが、子を含む必要がdiv.b
あり、そのdiv.b
子には子が必要div
です。
.find()
Felix Kling が上記のコメントで述べているように、すべての子孫を検索するには を使用する必要があります。これは、>
コンビネータを使用した最初のケースに適用されますele.find("div.a > div")
。
おそらくあなたが望むのは:
ele.find("div.a > div").addClass("active");
これは、シズル セレクターを 1 つだけ使用して、目的を達成します。BoltClock は、2 つの例が同じように機能しない理由について正しいです。別の言い方をすれば.children()
、直接の子のみを取得し.find()
ますが、「現在の」要素の下の階層にあるものはすべて取得します。