如果我的父母div
有子级.ads
,则我有条件,那么它应该alert('true')
其他alert('false')
。但是我的函数在两种情况下都返回true
。这是jsFiddle链接http://jsfiddle.net/F3EXf/
<head>
<script type="text/javascript" src="jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
if($('#me').find('.ads')){
alert('true')
} else {
alert('false')
}
});
</script>
</head>
<body>
<div id="me">
<div class="noads">aaaa</div>
</div>
</body>
您好vega请看下面的截图
答案 0 :(得分:9)
要检查元素是否存在,请使用
if ($('#me').find('.ads').length) {
...
}
因为$('#me').find('.ads')
总是返回true(它返回一个jQuery包装的空对象,被评估为真值),即使find()
所针对的元素不存在
答案 1 :(得分:3)
所有jQuery selectors和traversing函数都返回一个jQuery对象。 jQuery对象是一个类似于Array的对象,它具有属性和对核心函数的引用。
一个小例子,展示jQuery对象http://jsfiddle.net/Tj9e8/1/
中现有的属性和函数列表当你将jQuery函数调用为$(selector)
时,它会根据选择器创建一个包含匹配元素的包装列表的jQuery对象。
例如:执行$('#test')
时,它会创建一个jQuery对象并包装ID为test
的DOM元素。
从jQuery的.init
函数中检查以下代码片段,以便处理ID选择器
elem = document.getElementById(match[2]);
//match[2] is string 'test' in '#test' that was passed to $('#test')
if (elem && elem.parentNode) {
if (elem.id !== match[2]) {
return rootjQuery.find(selector);
}
//below 2 lines allows the jQuery object to behave like array like objects
this.length = 1;
this[0] = elem; //elem is nothing but the dom node.
}
this.context = document;
this.selector = selector;
return this; //Returns jQuery object
For more information check out the .init
function code
以下是$('#test')
的快照。
正如您所看到的,长度为0,但即使是$函数仍返回长度为0的jQuery对象。这是为了保护下一个链式调用而不是抛出错误。
在大多数情况下,我们选择一个元素来运行它的某些功能..
例如: $('#test').addClass('example')
。
$('#test')
使用字符串参数调用jQuery函数'#test'
.init
来确定参数的类型并返回一个用匹配元素包装的jQuery对象(如果有的话,只是jQuery对象)。 在jQuery对象上调用.addClass
,该对象在内部迭代匹配元素列表并将该类添加到元素中。以下是.addClass
功能代码
if (value && typeof value === "string") {
classNames = value.split(core_rspace);
for (i = 0, l = this.length; i < l; i++) {
//^-- This is where it iterate over matched elements
elem = this[i];
if (elem.nodeType === 1) {
现在需要注意的是,
jQuery对象只是一个带有以下
的javascript对象一个。包含一组匹配的元素An example using .find
湾属性 - Sample that lists properties
℃。函数 - Sample that lists functions
HTML:
<ul>
<li>Test</li>
<li class="red">Test</li>
<li>Test</li>
<li class="red">Test</li>
</ul>
<强> JS:强>
var $lisample = $('ul').find('.red');
.find
的结果不是包含的匹配元素集,如下所示
答案 2 :(得分:1)
$(function () {
if ($('#me').find('.ads').length>0) {
alert('true');
} else {
alert('false');
}
});
答案 3 :(得分:1)
我通常这样做:
if(typeof variable != 'undefined')
所以在你的情况下:
if(typeof variable[0] != 'undefined'){
因为.find函数返回一个数组。
<强> CODE 强>
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$(function(){
var variable = $('#me').find('.ads');
if(typeof variable[0] != 'undefined'){
alert('true')
} else {
alert('false')
}
});
});
</script>
</head>
<body>
<div id="me">
<div class="noads">aaaa</div>
</div>
</body>
</html>
您可以找到有关typeof variable != 'undefined'
here。
答案 4 :(得分:0)
小提琴链接:http://jsfiddle.net/F3EXf/8/
1.如果您需要寻找元素的孩子,请立即使用Children()。 2.另外,尝试计算选择器产生的元素,然后确定它是否可用
$(function(){
var children = $('#me').children('.noads');
if(children.length > 0){
alert('true')
}
else {
alert('false')
}
})
对于演示,请查找上面提供的小提琴链接。
要回答您的问题,如果元素不存在,为什么警告为真。