私はbクラスの前に2つのピリオドを置いているので、エラーを引き起こすjQueryコードの行があります。 jQueryが次の行をどのように解釈しているのでしょうか? 2つではなく、bの前に1つのピリオドしかない場合、jQueryは「クラスbがこのクラスの親クラスに存在する場合は警告を表示します」と解釈します。このjQueryラインは何をしていますか?
if ($(this).parent().find(".a ..b")) {
alert("hi");
});
私はbクラスの前に2つのピリオドを置いているので、エラーを引き起こすjQueryコードの行があります。 jQueryが次の行をどのように解釈しているのでしょうか? 2つではなく、bの前に1つのピリオドしかない場合、jQueryは「クラスbがこのクラスの親クラスに存在する場合は警告を表示します」と解釈します。このjQueryラインは何をしていますか?
if ($(this).parent().find(".a ..b")) {
alert("hi");
});
.a ..b
無効セレクタであり、それはエラーがスローされます。
Uncaught Error: Syntax error, unrecognized expression: .
.a .b
は正しい選択です。
ので$(this).parent().find(".a .b")
はまず、this
の直接の親ノードを取得します、それはclass="b"
と内class="a"
し、別の子孫要素と子孫要素を検索します、そしてそれはhi
に警告します見つけた場合。
これはブラウザによって異なる場合があります。 Internet Explorer 9とFirefox 10.0の両方でセレクタは何も見つけられず、空のjQueryオブジェクトが返されます。
if
の条件としてjQueryオブジェクトを使用しているので、if
のコードは常に実行されます。 jQueryオブジェクトは常に偽ではない値なので、セレクタから何かが見つかったかどうかに関係なく、条件は常にtrue
と評価されます。なぜあなたは二つの期間を使用している
if ($(this).parent().find(selector).length) {
ああ、私はそれが真実を返すとは思わなかった。ありがとうございました...実際に私はもう少しデバッグを助けました:) – Jon
:あなたは何かが見つかったかどうかを確認したい場合は
は、
length
プロパティを使用できますか? – Sarfrazそれは私が作ったタイプミスでしたが、コードはエラーにもかかわらず動作するようでした。私はちょうどそれを修正しようとしています。 – Jon
あなたの質問では、あなたはあなた自身を明示的に言いました:「私はbクラスの前に2つのピリオドを置いた」 – Sarfraz