如何高效地逐步执行jQuery代码?

8 浏览
0 Comments

如何高效地逐步执行jQuery代码?

我只是用jQuery玩了一会儿-之前一直在使用YUI,虽然我真的很欣赏jQuery库提供的很多东西,但我发现在调试器中逐步执行jQuery代码非常麻烦,我想知道是否有其他技巧,除了显而易见的事情?

以这样一个简单的函数为例:

function findFirstShortChild(parent) {
    var result = null;
    $("#" + parent + " li").each(function() {
        if ($(this).css("height") <= 10) {
            result = this;
            return(false);    // break out of each() function
        }
    });
    return(result);
}

如果这个函数没有按预期工作,我决定要逐步执行它,这真的不直观。实际上,你根本无法逐步执行它。你必须经过各种各样的jQuery代码和许多地方。你不能进入.each()循环,因为它实际上不是一个传统的循环。我对与其他库相比在调试器中感到无效率感到惊讶。所以,这是我的问题:

  • 你不能逐行执行,否则你会进入一堆jQuery函数。
  • 你无法进入循环内部,除非经过很多jQuery代码或设置断点并让它触发断点。
  • 你无法看到任何中间值,比如$(this)是什么,或者为什么可能会得到一个错误的高度值,而无需逐步执行大量外来的jQuery代码。
  • 你无法像在传统循环中一样中断each循环(使用break或return),因为它不是一个真正的循环。循环在.each()函数内部。这里看起来像一个循环的东西只是函数调用的内部。
  • 如果我想知道为什么在循环中得到一个错误的高度值,有没有办法在不经过大量jQuery代码的情况下弄清楚这一点?

那么,我在这里错过了什么?逐步执行这种代码是不是变得不那么方便了?我是否错过了一些内建在jQuery框架中的魔法技巧来帮助解决这个问题?或者使用这种风格的库的代价是你必须完全改变如何调试问题。

我应该这样做吗?

  • 在有问题的地方将中间值分配给本地变量,以便更容易检查它们,而不需逐步执行jQuery函数。
  • 在断点之间移动,而不是逐行执行。
  • 学会如何高效地进入和执行jQuery调用,以回答某些问题。

你们是如何做的?我错过了什么?

我应该提到我在FF5中使用Firebug和在Chrome中使用内置的调试器(现在更经常使用Chrome)。是的,调试时我使用的是debug(非压缩)版本的jQuery。所以,这不是关于你使用哪个调试器的问题,而是关于如何有效地使用调试器逐步执行jQuery代码的问题。

0