.find和.contents不工作

时间:2012-09-05 12:45:33

标签: javascript jquery html

如果我的父母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请看下面的截图

enter image description here

5 个答案:

答案 0 :(得分:9)

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

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

因为$('#me').find('.ads')总是返回true(它返回一个jQuery包装的空对象,被评估为真值),即使find()所针对的元素不存在

答案 1 :(得分:3)

所有jQuery selectorstraversing函数都返回一个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')的快照。

enter image description here

正如您所看到的,长度为0,但即使是$函数仍返回长度为0的jQuery对象。这是为了保护下一个链式调用而不是抛出错误。

在大多数情况下,我们选择一个元素来运行它的某些功能..

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

  1. 使用$('#test')使用字符串参数调用jQuery函数'#test'
  2. 上面的jQuery调用.init来确定参数的类型并返回一个用匹配元素包装的jQuery对象(如果有的话,只是jQuery对象)。
  3. 在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) {
    
  4. 现在需要注意的是,

    1. $ function总是返回一个jQuery对象
    2. jQuery对象只是一个带有以下

      的javascript对象

      一个。包含一组匹配的元素An example using .find

      湾属性 - Sample that lists properties

      ℃。函数 - Sample that lists functions

    3. 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的结果不是包含的匹配元素集,如下所示

      enter image description here

      更多阅读

      1. How do jQuery objects imitate arrays?
      2. jQuery object and DOM element
      3. http://blog.buymeasoda.com/does-calling-the-jquery-function-return-an-ob

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

        }
})

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

要回答您的问题,如果元素不存在,为什么警告为真。

  1. 它返回一个空数组但不返回空数组...这意味着它在结果对象中有一些信息,但长度为'零'但实际上它不是null或未定义