Javascript .find和.contents无效

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

我有一个条件,如果我的父div有class.ads的子对象,那么它应该警告'true'或者警告'false'。但我的函数在这两种情况下都返回true。这里是jsFiddle链接

嗨,织女星,请看下面的屏幕截图


要检查元素是否存在,请改用

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')

        }
})