2

我有一个条件,如果我的父母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 请看下面的截图

在此处输入图像描述

4

5 回答 5

9

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

if ($('#me').find('.ads').length) {
   ...
}

由于$('#me').find('.ads')将始终返回 true(它返回一个评估为 true 值的 jQuery 包装的空对象),即使目标元素find()不存在

于 2012-09-05T12:47:33.343 回答
3

所有 jQuery选择器遍历函数都返回一个 jQuery 对象。jQuery 对象是一个类数组对象,具有属性和对核心函数的引用。

显示 jQuery 对象http://jsfiddle.net/Tj9e8/1/中随时可用的属性和函数列表的小示例

当您将 jQuery 函数调用为$(selector)时,它会创建一个 jQuery 对象,其中包含基于选择器的匹配元素的包装列表。

例如:当你这样做时$('#test'),它会创建一个 jQuery 对象并用 ID 包装 DOM 元素test

检查 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

有关更多信息,请查看.init功能代码

下面是截图$('#test')

在此处输入图像描述

如您所见,长度为 0,但 $ 函数仍返回长度为 0 的 jQuery 对象。这是为了保护下一个链式调用而不是引发错误。

在大多数情况下,我们选择一个元素在其上运行某些功能。

例如: $('#test').addClass('example')

  1. $('#test')使用字符串参数调用的 jQuery 函数'#test'
  2. 上面的 jQuery 调用.init来确定参数的类型并返回一个包含匹配元素的 jQuery 对象(如果有,否则只是 jQuery 对象)。
  3. 调用.addClassjQuery 对象,该对象在内部迭代匹配元素的列表并将类添加到元素中。以下是.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) {
    

现在要注意的是,

  1. $ 函数总是返回一个 jQuery 对象
  2. jQuery 对象只不过是一个带有以下内容的 javascript 对象

    一个。包装的匹配元素集使用 .find 的示例

    湾。properties -列出属性的示例

    C。函数 -列出函数的示例

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如下所示,不是包装的匹配元素集,

在此处输入图像描述

更多阅读

  1. jQuery 对象如何模仿数组?
  2. jQuery 对象和 DOM 元素
  3. http://blog.buymeasoda.com/does-calling-the-jquery-function-return-an-ob
于 2012-09-07T17:06:25.450 回答
1

我通常这样做:

if(typeof variable != 'undefined')

所以在你的情况下:

if(typeof variable[0] != 'undefined'){

因为.find函数返回一个数组。

代码

<!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' 此处找到有关信息。

于 2012-09-09T20:02:24.707 回答
1
 $(function () {
        if ($('#me').find('.ads').length>0) {
            alert('true');
        } else {
            alert('false');
        }
    });
于 2012-09-05T12:49:15.767 回答
0

小提琴链接:http: //jsfiddle.net/F3EXf/8/

1.如果需要查找元素的子元素,请立即使用 Children()。2.另外,尝试计算选择器产生的元素,然后确定它是否可用

$(function(){
    var children = $('#me').children('.noads');
if(children.length > 0){
    alert('true')
    }

    else {
        alert('false')

        }
})

​</p>

对于演示,查找上面提供的小提琴链接。

要回答您的问题,如果元素不存在,为什么它会发出警报。

  1. 它返回一个空数组但不是空数组...这意味着它在结果对象中有一些信息但长度为“零”但实际上它不是空或未定义
于 2012-09-10T14:01:08.950 回答