2

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

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

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

}

这是供参考的工作版本。无论如何,这可能不会太慢​​加载,但我想限制在后台工作的内容,特别是window resize因为我听说它是​​一个资源猪(使用 Paul Irish 脚本)。

如果它像 PHP 一样,它根本不应该触发吗?

更新

因此,我偶然发现is()which 与语句执行相同的工作,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')仍然会返回一个对象,该对象的评估结果为真。如果要检查元素是否存在,则必须使用length.

于 2013-04-20T20:23:09.717 回答
2

$('.page-template')返回一个 jQuery 对象,并且对象在 Javascript 中是真实的,因此if始终输入该语句。

如果您想检查选择器匹配了多少元素,您可以访问lengthjQuery 对象的属性,0如果选择器不匹配任何内容,并且因为0它是虚假的,它将按照您期望的方式运行:

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