2

OK、Stackoverflow の長年のユーザーで、初めての質問者です。私は主に CSS/HTML の専門家であり、jQuery の基本しか知らないので、優しくしてください。

ターゲット要素が HTML で使用できない場合でも、なぜこのifステートメントがまだ実行されるのですか? この例(コンソール ログを表示) を参照.cta > .btnしてください。ページに何もない場合にも発生します。探すセクションは次のとおりです。

if ( $('.page-template') ) {

}

参照用の作業バージョンは次のとおりです。とにかく読み込みが遅くなるわけではありませんが、バックグラウンドで動作しているものを制限したいと思います。特にwindow resize、リソースを大量に消費していると聞いています (Paul Irish スクリプトを使用)。

PHP のようなものであれば、まったく起動しないはずです。

アップデート

だから私は、ステートメントis()と同じ仕事をするifが、クラスが存在する場合にのみオブジェクトを返すことに出くわしました。したがって、例として次のようにします。

$(function() {
  $('.nav-main .active.dropdown').is(
    function(){
  $(this).children('.dropdown-menu').removeClass('visuallyhidden')
  .parents('#menu-primary-navigation').addClass('dropdown-active');
  console.log('is fired');
}
  );
});

が利用可能な場合にのみ発火し.nav-main .active.dropdownます。だから私は(テストされていない)以下もうまくいくと思います:

if ( $('something').is() ) { ... }

更新 #02

!次のように感嘆符を使用して「ではない」を指定することもできます。

if ( !$('something') ) { ... }
4

2 に答える 2

6

これを試して:

if ( $('.page-template').length ) {

}

実行$('.page-template')するだけでも、true と評価されるオブジェクトが返されると思います。要素が存在するかどうかを確認したい場合は、 を使用する必要がありますlength

于 2013-04-20T20:23:09.717 に答える
2

$('.page-template')は jQuery オブジェクトを返します。オブジェクトは Javascript では true であるため、そのifステートメントは常に入力されます。

セレクターが一致した要素の数を確認したい場合lengthは、jQuery オブジェクトのプロパティにアクセスできます。これは0、セレクターが何も一致しなかった場合であり、0falsy であるため、期待どおりに動作します。

if ( $('.page-template').length )
于 2013-04-20T20:25:31.353 に答える