jQuery是否有任何"大声发现或失败"方法?

时间:2015-06-04 17:26:58

标签: jquery

考虑以下jQuery代码:

$('.child').closest('.parent').find('.sibling').hide();

在每一步中,如果找不到任何内容,jQuery将无声地失败(例如,如果没有.parent)。

有时这是有道理的,但通常只是意味着代码什么都不做,你必须解决原因。我喜欢选择做以下的事情:

$('.child').closest!('.parent')...

含义"如果你没有找到这个"则大声失败。 (如果只有在开发时才能启用此奖励。)

jQuery中有类似的内容吗?

1 个答案:

答案 0 :(得分:3)

没有,但你可以轻松搞定:

Object.keys($.fn).forEach(function(k){
  var f = $.fn[k];
  if (typeof f !=='function') return;
  $.fn['_'+k] = function(){
    var o = f.apply(this, arguments);
    if (o && 'length' in o && !o.length) throw "LOUD";
    return o;
  }
})

$("body")._find("unexisting"); // throws LOUD

或者,您可以在调试模式下替换现有函数:

if (DEBUG_MODE) {
    // let's be more cautious with an explicit list this time
    ['find','closest]'].forEach(function(k){
      var f = $.fn[k]; 
      $.fn[k] = function(){
        var o = f.apply(this, arguments);
        if (o && 'length' in o && !o.length) {
          throw "LOUD"; // you shall make it a more interesting error
        }  
        return o;
      };
    });
}

随着jQuery原型的曝光,可能性是无穷无尽的。

现在...... jQuery在空集合上不会失败的事实通常很有用。当然,您可以决定将此代码集成到调试/开发会话中。