考虑以下jQuery代码:
$('.child').closest('.parent').find('.sibling').hide();
在每一步中,如果找不到任何内容,jQuery将无声地失败(例如,如果没有.parent
)。
有时这是有道理的,但通常只是意味着代码什么都不做,你必须解决原因。我喜欢选择做以下的事情:
$('.child').closest!('.parent')...
含义"如果你没有找到这个"则大声失败。 (如果只有在开发时才能启用此奖励。)
jQuery中有类似的内容吗?
答案 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在空集合上不会失败的事实通常很有用。当然,您可以决定将此代码集成到调试/开发会话中。