好的,这是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') ) { ... }
答案 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}}