2010-11-18 9 views
0

この非常に奇妙なシナリオを実行しました。

if ($('#content h1').hasClass('active')) { 
    $(this).hide(); 
} 

のみ、この意志:私は(これ)を使用することはできませんなぜ

if ($('#content h1').hasClass('active')) { 
    $('#content h1').hide(); 
} 

これはH1を隠していないのだろうか?スクリプトに何か問題がありますか?

答えて

3

これは正しい動作です。 ifステートメントthisの文脈では、h1要素への参照ではなく、document要素(または、関数内にある場合は関数)への参照を保持します。あなたが行うことができ

+0

^'$(this)' :-) – fearofawhackplanet

0

:この場合

$('#content h1').foreach(function() { 
    if (!$(this).hasClass('active')) { 
     $(this).hide(); 
    } 
}); 

、ヤンは説明したように、これはあなたがそれが(見出し要素)であることを期待コンテキストになります。何をしたい

0

は、あなたの「これ」は、上述したように、あなたのオブジェクトを参照しませんおそらく

var h1 = $('#content h1') 
if (h1).hasClass('active')) { 
    h1.hide(); 
} 

です。

+0

もっとシンプルでパフォーマンスの高いものは $( '#content h1.active')。hide(); – Sam

0

ステートメント$('#content h1').hasClass('active')は、$(this)を使用しようとしているjQueryオブジェクトではなく、ブール値(trueまたはfalse)を返します。 hasClasshereの使用方法を参照してください。

あなたが特定のセレクタに一致するすべての要素に対してアクションを実行しようとしている場合、このセレクタを与える代わりにしてみてください:

$("#content h1.active").hide(); 

これが含まれている「コンテンツ」のid属性を持つすべての要素を検索しますclass属性が「active」である要素h1をすべて非表示にします。

関連する問題