2012-02-25 1 views
0

私はbクラスの前に2つのピリオドを置いているので、エラーを引き起こすjQueryコードの行があります。 jQueryが次の行をどのように解釈しているのでしょうか? 2つではなく、bの前に1つのピリオドしかない場合、jQueryは「クラスbがこのクラスの親クラスに存在する場合は警告を表示します」と解釈します。このjQueryラインは何をしていますか?

if ($(this).parent().find(".a ..b")) { 
    alert("hi"); 
}); 
+5

:あなたは何かが見つかったかどうかを確認したい場合は

は、lengthプロパティを使用できますか? – Sarfraz

+0

それは私が作ったタイプミスでしたが、コードはエラーにもかかわらず動作するようでした。私はちょうどそれを修正しようとしています。 – Jon

+0

あなたの質問では、あなたはあなた自身を明示的に言いました:「私はbクラスの前に2つのピリオドを置いた」 – Sarfraz

答えて

8

.a ..b無効セレクタであり、それはエラーがスローされます。

Uncaught Error: Syntax error, unrecognized expression: . 

.a .bは正しい選択です。

ので$(this).parent().find(".a .b")はまず、thisの直接の親ノードを取得します、それはclass="b"と内class="a"し、別の子孫要素と子孫要素を検索します、そしてそれはhiに警告します見つけた場合。

+0

+1それはボーナスの質問です:) – Sarfraz

+0

これは、そのif文がエラーのために決して実行されないことを意味しますか? – Jon

+0

@ icu222Much、はい、エラーのために、javascriptインタプリタは単にスクリプトの実行を停止します。 –

3

これはブラウザによって異なる場合があります。 Internet Explorer 9とFirefox 10.0の両方でセレクタは何も見つけられず、空のjQueryオブジェクトが返されます。

ifの条件としてjQueryオブジェクトを使用しているので、ifのコードは常に実行されます。 jQueryオブジェクトは常に偽ではない値なので、セレクタから何かが見つかったかどうかに関係なく、条件は常にtrueと評価されます。なぜあなたは二つの期間を使用している

if ($(this).parent().find(selector).length) { 
+0

ああ、私はそれが真実を返すとは思わなかった。ありがとうございました...実際に私はもう少しデバッグを助けました:) – Jon

関連する問題