如果取消注释body.children().each(calc_deep(1));
,我会在TypeError: Object [object Window] has no method 'attr'
字符串上获得parseInt(deepest.attr('deep'))
,但如果没有取消注释,您可以在控制台中检查您是否可以调用deepest.attr('deep')
。那是什么?
var deepest;
var calc_deep = function(i)
{
$(this).attr('deep',i);
if(i>parseInt(deepest.attr('deep')))
deepest=this;
$(this).children().each(calc_deep(i+1));
}
var find_deepest = function()
{
body=$('body').children().eq(0);
body.attr('deep',0);
deepest=body;
//body.children().each(calc_deep(1));
}
find_deepest();
答案 0 :(得分:4)
each
接受一个参数的函数,你传递它undefined
- 因为你先调用函数然后它的返回值是each()
得到的。
改为使用function() {calc_deep(1);}
。
答案 1 :(得分:1)
第一个deepest
是变量body
,它是一个jQuery对象。稍后,当您将最深处分配给this
时,它是一个常规DOM元素,它没有attr
函数。
你有一个更大的问题 - this
没有指出你认为它的元素。在没有函数参数的情况下调用$(this).children().each(calc_deep);
。要获得深度,只需从父级获取。您正在调用函数calc_deep并将(不存在的)返回值传递给each
。您希望将函数本身传递给每个函数。
var deepest, index;
var calc_deep = function() {
var $this = $(this); //cache jQuery this
var i = $this.parent().data("deep") + 1;
$this.data('deep', i);
if (i > index) {
deepest = $this;
index = i;
}
$this.children().each(calc_deep);
}
var find_deepest = function() {
body = $('body').children().eq(0);
body.data('deep', 0);
index = 0;
deepest = body;
body.children().each(calc_deep);
}
find_deepest();