Javascript 避免jQuery静默失败的模式

Javascript 避免jQuery静默失败的模式,javascript,jquery,Javascript,Jquery,有没有什么好的做法可以避免jQuery代码以静默方式失败 例如: $('.this #is:my(complexSelector)').doSomething(); 我知道每次执行这一行时,选择器都要匹配至少一个元素,或者一定数量的元素。是否有任何标准或好的方法来验证这一点 我想到了这样的事情: var $matchedElements = $('.this #is:my(complexSelector)'); if ($matchedElements.length < 1) t

有没有什么好的做法可以避免jQuery代码以静默方式失败

例如:

$('.this #is:my(complexSelector)').doSomething();
我知道每次执行这一行时,选择器都要匹配至少一个元素,或者一定数量的元素。是否有任何标准或好的方法来验证这一点

我想到了这样的事情:

var $matchedElements = $('.this #is:my(complexSelector)');
if ($matchedElements.length < 1)
    throw 'No matched elements';
$matchedElements.doSomething();
var$matchedElements=$('.this#是:my(complexSelector)');
如果($matchedElements.length<1)
抛出“无匹配元素”;
$matchedeElements.doSomething();
此外,我认为单元测试将是一个有效的选择,而不是混乱的代码

我的问题可能很傻,但我想知道是否有比我目前正在做的事情更好的选择。另外,可能我检查任何元素是否与选择器匹配的方式不对。但是,随着页面的不断增长,选择器可能会停止匹配某些元素,并且功能可能会在无意中停止工作

当选择器不匹配任何内容时,不一定是错误的;这取决于你的申请。您可以编写自己的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.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;
};
我建议使用

比如说

$(function(){
  var foo = $('.this #is:my(complexSelector)');
});
将抱怨您有一个无效的选择器(正如给定的示例所示,选择器实际上是无效的,尽管我假设您知道:),并且实际上没有找到任何元素


请参见示例。

哈哈,我只想给出一个可笑的选择器示例,谢谢!
$(function(){
  var foo = $('.this #is:my(complexSelector)');
});