我尝试使用jQuery的$(this)
选择器和元素的类来计算一个div内部子元素的数量,但结果却不同。我认为jQuery的$(this)
指的是函数的所有者对象,是否有什么特殊之处我没有注意到?
$('.parent').ready(function(){
$('.parent').children().length; // 6
$(this).children().length; // 1
});
我尝试使用jQuery的$(this)
选择器和元素的类来计算一个div内部子元素的数量,但结果却不同。我认为jQuery的$(this)
指的是函数的所有者对象,是否有什么特殊之处我没有注意到?
$('.parent').ready(function(){
$('.parent').children().length; // 6
$(this).children().length; // 1
});
This:
$('.parent').children().length; // 6
$(this).children().each(function().length; // 1
这是一种语法错误。如果你真的想遍历子元素,可以使用“.each()”,但必须正确使用:
$(this).children().each(function() {
var $child = $(this);
// ...
});
请注意,在“.each()”回调函数内,this
将随着jQuery调用函数的每个子元素而逐个引用。
$('.parent')
选择所有类名为 "parent" 的元素。在 ".each()" 函数内部,this
将指向单个元素。"ready()" 处理程序始终适用于整个文档,无论您使用什么选择器,因此在 "ready" 处理程序中,this
将根本不引用您的元素。 - Pointy$('.parent').ready()
方法中的 $(this)
指的是 $('.parent')
对象。
children()
集合的 each()
方法中的 $(this)
指的是当前迭代的子元素。
因此,实现相同数量的方法(无论出于何种原因)是:
$('.parent').ready(function(){
var directLength = $(this).children().length; // 6
var indirectLength = 0;
$(this).children().each(function(){
indirectLength++;
});
alert([directLength, indirectLength].join("\n"));
});
编辑:您的评论只能有一个意思:您有6个 class 为 parent
的元素,每个元素只有一个子元素。因此,我假设您想要计算父元素的数量,这是正确的代码:
$(document).ready(function() {
var directLength = $('.parent').length; // 6
var indirectLength = 0;
$('.parent').each(function() {
indirectLength++;
});
alert([directLength, indirectLength].join("\n"));
});
$('.parent')
是所有具有该类的六个元素的集合,我想你想要单独迭代每个元素? - Shadow The Spring Wizard$(this)
指向具有类名 "parent" 的当前元素,所以 ready()
方法会分别应用于它们。 - Shadow The Spring Wizard