【发布时间】:2014-07-05 22:12:52
【问题描述】:
我正在尝试通过我编写的 jQuery 函数找到我选择的 jQuery 元素的最后一个子元素。如果我将调试器放在函数中并运行它,我可以跟踪“当前”的值并且它正在做我想要的 - 它会像我希望的那样冒泡到最后一个孩子,但它不会在我调用的地方返回它它(它返回未定义)。
代码如下:
(function($){
$.fn.findBattleElement = function () {
var current = this;
var findLast = function () {
if ( current.children().length > 0 ) {
if ( current.children().last().is('br, p, span, td, ul, ol, li, tr, table, a, img, video, div, section, article, footer, header') ) {
current = current.children().last();
findLast();
} else {
current.children().last().remove();
findLast();
}
} else {
return current;
}
}
findLast()
};
} ( jQuery ) );
我确实尝试删除函数内部的函数,并让它尝试递归调用自身,而不是使用
findlast() 在第一个 if/else 中,我使用了 current.findBattleElement(),但它只是给出了一个错误,即函数本身未定义。
我知道整个事情有点不成熟(抱歉缩进,它在我的文档中看起来不错,但不能很好地延续到 stackOverflow!),但我正在努力学习。任何帮助将不胜感激。
【问题讨论】:
-
要在 SO 中粘贴缩进的代码,请确保它只使用空格,而不是制表符。将其粘贴进去,然后使用 SO 编辑器工具栏中的
{}工具将其标记为代码。 -
谢谢!下次我一定会缩进更好。不过,您能指定哪个
findlast()需要“返回”吗?我假设您的意思是最后一个,它最初调用该函数,但是如果我这样做,它现在会在到达最后一个 else 时失去“当前”的值。这可能是我的逻辑中的一个缺陷,但我确信调试器之前在这里返回了一个值! (我已经为此工作了大约 18 个小时,所以事情变得模糊了!) -
12 小时后,我终于找到了它——我需要在 findLast 函数的最后再添加一个
return current;。 -
如果你想问一个关于特定答案的问题,你应该把它放在答案下面的 cmets 中,而不是问题下面的 cmets 中。
-
好的,谢谢@Barmar。
标签: jquery function return undefined