【问题标题】:jQuery function inside a function, works, but returns undefined函数内的jQuery函数,有效,但返回未定义
【发布时间】: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


【解决方案1】:

你需要做的:

return findLast();

从递归函数返回值。

【讨论】:

    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    相关资源
    最近更新 更多