2011-09-02 48 views
10

我是新来的jQuery,我想简化它找不到的元素的处理,这是一个相当普遍的问题。下面的代码显示了我的意思是:现在有没有可能让jQuery在找不到元素时抛出异常?

var category = $('select#Category'); 

,我可以检查返回的变量,看看是否未找到它,但我肯定会喜欢的例外是在这种情况下自动抛出。这是所有可能的jQuery?如果没有,是否有一些在jQuery之上实现这种自动错误检查的常见习惯用法?

回答

12

我不知道任何现有的功能来做到这一点,但我认为这应该为你工作,如果你把它放在页面的顶部使用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, $, _$); 
})(); 

JSFiddle Example

+0

改进:将throw行更改为'throw'找不到元素:'+ arguments [0];'你可以看到选择器导致错误。 – Jamiec

+0

@Jamiec谢谢,这是一个很好的补充:) – Paulpro

+0

其实,我现在看到这个解决方案的一个真正的问题。用这个函数替换$后,我必须以_ $的形式访问jQuery API。例如:_ $。格式。那么我们如何改变解决方案来将异常抛出的包装公开为_ $而不是?如果我无法完全包装$,我宁愿只调用_ $()来检查未定义的变量。 – aknuds1

2

我只是用这个办法:

if (category.length == 1) { 
// node has been found (and is the only one in the dom) 
} 

我认为,抛出异常是不是一个好主意:P

+0

也许你对JavaScript中的例外情况是完全正确的,但我讨厌不得不明确检查每个变量。这就像在C中,我将定义宏来处理自动指示返回值的错误。 – aknuds1

+0

@ aknuds1 daveoncode是正确的。未捕获的异常是Javascript中的错误,并导致执行停止。所以如果你使用异常的话,你需要在所有地方尝试catch块。我更新了我的JSFIddle示例,以显示在未捕获的异常之后永远不会达到的一行代码:http://jsfiddle.net/Paulpro/P87Cp/ – Paulpro

+0

@PaulPRO尽管这与其他语言没有区别。好处是我可以在一个地方处理一个函数中的所有未定义的变量(catch块)。 – aknuds1

相关问题