我刚刚开始使用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 函数中。 - 如果你想进入 each 循环的内部,你需要穿过很多 jQuery 代码或设置断点并让它命中断点才可以。 - 你无法看到任何中间值(例如 $(this))或为什么可能会得到错误的高度值,而又不需要逐步执行成千上万行外部的 jQuery 代码。 - 你无法像在传统循环中那样跳出 each 循环(使用 break 或 return),因为它不是一个实际的循环。循环在 .each() 函数内部。在这里看起来像一个循环的东西只不过是一个函数调用的内部。 - 如果我想知道为什么在循环中得到了错误的高度值,有没有办法在不逐步执行大量 jQuery 代码的情况下弄清楚呢?
那么,我在这里错了什么?是不是逐步执行这种代码更不方便?我是否错过了内置于 jQuery 框架中的一些神奇技巧来帮助解决这个问题?还是使用这种样式库要付出的代价就是要完全改变您如何调试问题。
你需要做的:
- 在有问题的地方为中间值分配本地变量,以便更轻松地检查它们,而无需逐步执行大量 jQuery 函数。 - 而不是逐行执行,从断点到断点移动。 - 学习如何有效地进入和通过 jQuery 调用(efficiently)回答某些问题。
你们是怎么做的?我错过了什么?
我应该提到,在 Firefox 5 中,我使用 Firebug,在 Chrome 中使用内置的调试器(现在更频繁地使用 Chrome)。是的,我在调试时使用未经缩小的版本 jQuery。所以,这不是关于使用哪个调试器的问题,而是关于如何使用调试器有效地逐步执行 jQuery 代码的问题。
each
循环时,将断点放置在each函数内部。这样你就能够更容易地进行调试了。 - user405398