0
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Demo</title>
</head>
<body>
</body>
</html>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
if ( $( '#nonexistent' ) ) { 
console.log('test');
}
</script>

问题:

实际上我的页面中没有这样的id #nonexistent,但是为什么这条线仍然运行:console.log('test');

4

4 回答 4

1

因为$( '#nonexistent' )返回一个空集(基本上是一个数组)并且空数组在布尔上下文中产生 true。

你需要检查一下$('#nonexistent').length

如果您对它的具体工作原理感兴趣,请阅读有关 javascript 中的真/假的站点点文章

你也可以使用

// pretty jQuery-like
document.querySelector('#nonexistent')
// or a bit faster faster:
document.getElementById('nonexistent')
于 2013-06-19T07:51:29.503 回答
1

$( '#nonexistent' )返回一个对象(jQuery 对象),并且所有对象的真实性都是 yes。您应该改用:

if ( $( '#nonexistent' )[0] ) { 
  console.log('test');
}

或者更好的是,根本不需要 jQuery:

if (document.getElementById("nonexistent")) {
  console.log("not gonna happen");
}
于 2013-06-19T07:51:37.413 回答
0

使用该.length成员查看它是否存在。

if ( $( '#nonexistent' ).length ) { 
    console.log('test');
}
于 2013-06-19T07:51:47.067 回答
0

要测试元素是否存在,请使用长度函数。

if ( $( '#nonexistent' ).length > 0) { console.log('test'); }

您不需要,> 0但它有助于提高可读性。

于 2013-06-19T07:53:47.127 回答