2011-09-02 5 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 'に変更しました。要素が見つかりませんでした:' + 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のエラーであり、実行を停止させます。したがって、例外を使用した場合は、try catchブロックが必要です。私はJSFIddleのサンプルを更新して、未知の例外の後にコードの行に到達しない方法を示しました:http://jsfiddle.net/Paulpro/P87Cp/ – Paulpro

+0

@PaulPROこれは他の言語と違いはありません。利点は、1つの関数内のすべての未定義変数を1つの場所(catchブロック)で処理できることです。 – aknuds1

関連する問題