为什么.children.length只返回2?

时间:2013-06-25 11:42:57

标签: jquery

我正在尝试使用wrapper属性获取.length的子元素数,但在将其与.children一起使用时,计数始终等于2。

    <div id="wrapper">
       <div>content a</div> <!-- visible -->
       <div>content b</div> <!-- visible -->
       <div>content c</div> <!-- not visible -->
       <div>content d</div> <!-- not visible -->
    </div>

正如我在SO上所了解的那样,长度属性并未考虑元素可见性。因此,在这种情况下,返回的值应该等于 4 ,但是当使用$('#wrapper').children.length;时,只返回 2

问题:为什么$('#wrapper').children.length;仅返回2?

谢谢!

7 个答案:

答案 0 :(得分:6)

检查

$('#train').children().length

演示:Fiddle

你得到2因为
$('#train').children.length返回number of arguments expected by the function.

有关详细信息,请参阅Function.length

在你的情况下$('#train').children引用一个函数,这个函数期望2个参数,这就是为什么你得到2作为输出,而不是因为它是可见子项的数字

答案 1 :(得分:3)

  

论坛指向.length属性,但这只返回可见项目的数量。

不,.length返回有问题的jQuery对象中的元素数,无论您如何获取jQuery对象或元素当前是否可见。

  

如何计算#train的所有孩子?

你可以做任何对你的情况有意义的事情:

// all direct children of any element type
$("#train").children().length
// OR just the DIV children
$("#train").children("div").length
// OR all descendant DIVs
$("#train").find("div").length
  

使用$('#train').children.length;时返回。

那是因为你实际上并没有调用.children()方法 - 你省略了括号,这意味着你得到了函数本身的.length属性,它返回了声明的参数的数量。 / p>

答案 2 :(得分:3)

你的问题是忘记了括号。

尽管可能令人惊讶,但无论元素是什么,它都会返回2:

$(element).children.length

添加括号,好了:

$(element).children().length

你为什么得到2?那是因为函数的长度是as said by the MDN

  

函数预期的参数数量。

答案 3 :(得分:2)

$('#train > div:visible').length  //visible ones
$('#train > div:hidden').length //hidden ones
$('#train > div').length //all children DIVs

答案 4 :(得分:2)

这应该有效:

var childrenCount = $('#train').children().length;

答案 5 :(得分:1)

这样做

$('#train').children().length

答案 6 :(得分:0)

而不是以下代码:

$('#train').children.length;

使用以下代码:

$('#train').children("div").length;