2017-08-11 14 views
0

"or"ステートメントをスクリプトに追加する方法を理解しようとしています。 .contentが245pxより大きい場合、またはdiv.contentの中にどこにでも表示がない場合は、.showクラスを.moreに追加します。divに高さやクラスが存在する場合は、クラスを追加してください。

私はそれを下に持っている方法は正しく動作しません...クラス.showは常に適用されています。

if ($('.importantNotice .content').height() >= 245 || ($('.importantNotice .content .landing-no-display'))) { 
    $('.importantNotice .more').addClass("show"); 
} 

答えて

0

最初のjQueryをより効率的にする(2回1つのセレクタを使用していない)と、例えばDOMナビゲーションのためのjQueryツリートラバーサルメソッドを使用しますfind()next()などの代わりに、複雑なCSSセレクタに

ツリー全検索の使用:https://api.jquery.com/category/traversing/tree-traversal/

セレクタ効率:あなたのケースでhttps://learn.jquery.com/performance/optimize-selectors/

それはなりますjQueryオブジェクトを返すよう$('.importantNotice .content .landing-no-display')は常に、trueを返します内は真実に強制されたif状態。

要素が見つからないようにするには、そのオブジェクトの.lengthプロパティを使用する必要があります。

var $importantNotice = $('.importantNotice'), 
    $importantNoticeContent = $importantNotice.find('.content'), 
    $importantNoticeMore = $importantNotice.find('.more'); 

if ($importantNoticeContent.height() >= 245 ||$importantNoticeContent.find('.landing-no-display').length) { 
    $importantNoticeMore.addClass("show"); 
} 
+0

@godblessstrawberryありがとうございました。 .hasClassはチェックする項目を指定しなければならないと思います。私の場合は、クラス内のどこにでも表示されているかどうか、割り当てられているアイテムを指定せずに.contentの子孫として知りたいのです。 – Brandon

+0

@Brandonはそれを得て、答えを更新しました – godblessstrawberry

0

2番目のjQueryオブジェクトのlengthプロパティをチェックする必要があります。現時点では、jQueryオブジェクトがブール値に強制されるため、常に真となります。これを試してみてください:すべての使用変数の

if ($('.importantNotice .content').height() >= 245 || $('.importantNotice .content .landing-no-display').length) { 
    $('.importantNotice .more').addClass("show"); 
} 
関連する問題