Javascript .find和.contents无效
我有一个条件,如果我的父div有class.ads的子对象,那么它应该警告'true'或者警告'false'。但我的函数在这两种情况下都返回true。这里是jsFiddle链接 嗨,织女星,请看下面的屏幕截图Javascript .find和.contents无效,javascript,jquery,html,Javascript,Jquery,Html,我有一个条件,如果我的父div有class.ads的子对象,那么它应该警告'true'或者警告'false'。但我的函数在这两种情况下都返回true。这里是jsFiddle链接 嗨,织女星,请看下面的屏幕截图 要检查元素是否存在,请改用 if ($('#me').find('.ads').length) { ... } 由于$'me'.find'.ads'将始终返回true,因此即使find所针对的元素不存在,它也会返回一个jQuery包装的空对象,并将其作为true值进行计算所有jQu
要检查元素是否存在,请改用
if ($('#me').find('.ads').length) {
...
}
由于$'me'.find'.ads'将始终返回true,因此即使find所针对的元素不存在,它也会返回一个jQuery包装的空对象,并将其作为true值进行计算所有jQuery和函数都会返回一个jQuery对象。jQuery对象是一个类似数组的对象,具有属性和对核心函数的引用
$(function () {
if ($('#me').find('.ads').length>0) {
alert('true');
} else {
alert('false');
}
});
一个小示例,显示jQuery对象中可用的属性和函数列表
当您以$selector的形式调用jQuery函数时,它将创建一个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
下面是$'test'的快照
如您所见,长度为0,但即使$function返回长度为0的jQuery对象。这是为了保护下一个链接调用,而不是抛出错误
在大多数情况下,我们选择一个元素在其上运行一些函数
例如:$'test'.addClass'example'
使用$'test'和字符串参数'test'调用的jQuery函数
jQuery调用上面的.init来确定参数的类型,并返回一个包含匹配元素的jQuery对象。如果有,则返回jQuery对象。
jQuery对象上的Call.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) {
不是匹配元素的包装集。查找的结果如下所示
更多阅读
我通常这样做:
if(typeof variable != 'undefined')
因此,在你的情况下:
if(typeof variable[0] != 'undefined'){
因为函数返回一个数组
代码
您可以找到有关变量类型的信息!='未定义的“.小提琴链接:
1.如果需要查找元素的子元素,请立即使用子元素。
2.另外,尝试计算选择器产生的元素,然后确定其是否可用
$(function(){
var children = $('#me').children('.noads');
if(children.length > 0){
alert('true')
}
else {
alert('false')
}
})
对于演示,请查找上面提供的小提琴链接
要回答您的问题,请说明如果元素不存在,为什么会以true发出警报
它返回一个空数组,但不是空数组。。。这意味着它在结果对象中有一些信息,但长度为“零”,但实际上它不是空的或未定义的
因为在你的例子中没有ads类。。。虽然有一个noads类。是的,您是对的,但只有在检查选择器长度时,它才会返回false。选择错误的元素不会在jQuery中触发错误,它只是默默地失败。正如其他人所说,检查length但为什么返回true,后面的原因是什么不需要使用>0,因为0=false,上面的所有内容都将被视为true。您能详细说明一下吗。为什么它在所有情况下都返回true,因为.find方法允许我们在DOM树中搜索这些元素的后代,并从匹配的元素构造新的jQuery对象。find创建jQuery包装的节点集合,在任何情况下计算为true。对于您的目的来说,重要的是检查集合是否为空或空not@fabrizio:我想了解有关jQuery包装节点集合的更多信息。你能给我推荐一些关于jQuery包装的nodethanks的文章或其他东西来解释清楚吗。您已经发布了DOM的屏幕截图。我想检查选择器的长度,所以如何在DOM中检查它。就像你做的一样,我正在搜索。DOM中的子类,函数工作得很好。但当我在DOM中查看时,它显示的是它的长度0。这是。我将DOM截图附加到我的question@amit你看到快照了吗。。选择器是。。我无法复制你提到的问题。。你的小提琴很好用。。除了那个缺失的标签。谢谢你们的回复,我只是想知道如何在中看到选择器的长度DOM@amit$selector.length将返回selector表示匹配元素计数的长度。。如果那是你想要的。。如果没有,请张贴并举例说明,并告诉我您的期望和返回的内容。。
if(typeof variable != 'undefined')
if(typeof variable[0] != 'undefined'){
<!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>
$(function(){
var children = $('#me').children('.noads');
if(children.length > 0){
alert('true')
}
else {
alert('false')
}
})