为什么这个IF声明仍在解雇?

时间:2013-04-20 20:22:01

标签: javascript jquery if-statement resize window-resize

好的,这是Stackoverflow的长期用户,第一次提问。请记住,我主要是一个CSS / HTML人,只知道jQuery基础,所以要温柔!

为什么哦,为什么这个if语句仍在触发,即使目标元素在HTML中不可用?请参阅this example(查看控制台日志),当页面上没有.cta > .btn时也会发生这种情况。要查找的部分是:

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

}

以下是working version供参考。这可能不会太慢​​加载,但我想限制在后台工作,特别是window resize,因为我听说它是​​一种资源匮乏(使用保罗爱尔兰文字)。

如果它像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') ) { ... }

2 个答案:

答案 0 :(得分:6)

试试这个:

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

}

我相信只做$('.page-template')仍会返回一个对象,该对象的计算结果为true。如果要检查元素是否存在,则必须使用length

答案 1 :(得分:2)

$('.page-template')返回一个jQuery对象,Javascript中的对象很简洁,因此总是输入if语句。

如果要检查选择器匹配的元素数量,您可以访问jQuery对象的length属性,如果选择器与任何内容不匹配,则0 0 if ( $('.page-template').length ) 这是假的,它会按照你期望的方式行事:

{{1}}