避免jQuery静默的模式失败

有没有什么好的做法可以避免你的jQuery代码无声地失败?

例如:

$('.this #is:my(complexSelector)').doSomething(); 

我知道每次执行此行时,选择器都要匹配至少一个元素或一定数量的元素。 是否有任何标准或好的方法来validation?

我想过这样的事情:

 var $matchedElements = $('.this #is:my(complexSelector)'); if ($matchedElements.length < 1) throw 'No matched elements'; $matchedElements.doSomething(); 

此外,我认为unit testing将是一个有效的选项,而不是搞乱代码。

我的问题可能很愚蠢,但我想知道是否有比我目前正在做的事情更好的选择。 另外,也许我错误地检查是否有任何元素与我的选择器匹配。 但是,随着页面的不断增长,选择器可能会停止匹配某些元素,而function部分可能会无意中停止工作。

你可以写一个插件:

 jQuery.fn.requireElements = function (amount, exactMatch) { if (amount === undefined) { amount = 1; }; if (this.length < amount || this.length > amount && exactMatch) { throw new Error(this.length " elements instead of " (exactMatch ? "at least " : "") + amount); }; return this; }; 

然后:

 $('yourSelector').requireElements(2).bind('click', function () { }); 

当选择器没有匹配时,它不一定是错的 ; 这取决于你的申请。 您可以编写自己的validateNonEmpty插件:

 jQuery.fn.validateNonEmpty = function() { if (this.length == 0) throw "Empty list detected - selector: " + this.selector; return this; // thanks @Matt }; 

然后你可以这样做:

 $('something something').validateNonEmpty().doSomething(); 

另请注意,您要检查长度是否为0,不小于0。

我建议使用jQuery lint 。

例如

 $(function(){ var foo = $('.this #is:my(complexSelector)'); }); 

会抱怨你有一个无效的选择器(因为给定的示例选择器实际上是无效的,虽然我假设你知道:)),并且没有实际找到的元素。

有关示例,请参见http://js.azatoth.net/test/lint.html 。