我是新来的jQuery,我想简化它找不到的元素的处理,这是一个相当普遍的问题。下面的代码显示了我的意思是:现在有没有可能让jQuery在找不到元素时抛出异常?
var category = $('select#Category');
,我可以检查返回的变量,看看是否未找到它,但我肯定会喜欢的例外是在这种情况下自动抛出。这是所有可能的jQuery?如果没有,是否有一些在jQuery之上实现这种自动错误检查的常见习惯用法?
我是新来的jQuery,我想简化它找不到的元素的处理,这是一个相当普遍的问题。下面的代码显示了我的意思是:现在有没有可能让jQuery在找不到元素时抛出异常?
var category = $('select#Category');
,我可以检查返回的变量,看看是否未找到它,但我肯定会喜欢的例外是在这种情况下自动抛出。这是所有可能的jQuery?如果没有,是否有一些在jQuery之上实现这种自动错误检查的常见习惯用法?
我不知道任何现有的功能来做到这一点,但我认为这应该为你工作,如果你把它放在页面的顶部使用jQuery之前,但它装载后:
(function(){
var _$ = $;
$ = function(){
var $res = _$.apply(0, arguments);
if(!$res.length && typeof arguments[0] === 'string')
throw 'No element Found: ' + arguments[0];
return $res;
}
$ = _$.extend(true, $, _$);
})();
我只是用这个办法:
if (category.length == 1) {
// node has been found (and is the only one in the dom)
}
我认为,抛出异常是不是一个好主意:P
也许你对JavaScript中的例外情况是完全正确的,但我讨厌不得不明确检查每个变量。这就像在C中,我将定义宏来处理自动指示返回值的错误。 – aknuds1
@ aknuds1 daveoncode是正确的。未捕获的异常是Javascript中的错误,并导致执行停止。所以如果你使用异常的话,你需要在所有地方尝试catch块。我更新了我的JSFIddle示例,以显示在未捕获的异常之后永远不会达到的一行代码:http://jsfiddle.net/Paulpro/P87Cp/ – Paulpro
@PaulPRO尽管这与其他语言没有区别。好处是我可以在一个地方处理一个函数中的所有未定义的变量(catch块)。 – aknuds1
改进:将throw行更改为'throw'找不到元素:'+ arguments [0];'你可以看到选择器导致错误。 – Jamiec
@Jamiec谢谢,这是一个很好的补充:) – Paulpro
其实,我现在看到这个解决方案的一个真正的问题。用这个函数替换$后,我必须以_ $的形式访问jQuery API。例如:_ $。格式。那么我们如何改变解决方案来将异常抛出的包装公开为_ $而不是?如果我无法完全包装$,我宁愿只调用_ $()来检查未定义的变量。 – aknuds1