2011-06-25 3 views
8

通常、jQueryで要素を選択するとき、一致する要素が見つからない場合はエラーが発生することをお勧めします。要素と一致しないときにjQueryをスローするエラー

$('ul.some-list').append(listItem) 

私のjQueryの呼び出しが要素と一致したことを確実にするための便利な方法があります:

例えば、私はちょうど私がul要素のクラスを変更したため、これは失敗したバグがありましたか?

+0

http://stackoverflow.com/questions/3709604/why-doesnt-jquery-bomb-if-your-selector-object-is-invalid/3709634#3709634 – Dogbert

答えて

11

あなたはjQueryオブジェクトが空でないことを確認するために使用するプラグインを作ることができる:

$.fn.ensure = function() { 
    if (this.length === 0) throw "Empty jQuery result." 
    return this; 
} 

使用上:私の場合は

$('ul.some-list').ensure().append(listItem); 
+0

これはすばやく簡単な解決方法です! –

6

、私は、それが自動的にすべてのものに適用されたかったです私はjQueryのコンストラクタを変更しました。開発中に間違いをキャッチするためにのみこれを使用することをお勧めしますが、他人を混乱させないように、あなたの生産から離してください。それはエラーではないので、私はちょうどコンソールロギングを使用しました。しかし、私はあなたが、むしろそれを使用する場合はコメントアウトスローを追加しました:

var jQueryInit = $.fn.init; 

$.fn.init = function(arg1, arg2, rootjQuery) { 
    var element = new jQueryInit(arg1, arg2, rootjQuery); 
    if (arg1 && element.length === 0) { 
     console.log(arg1 +" doesn't exist"); 
     // throw arg1 +" doesn't exist" 
    } 
    return element; 
}; 

を私は本当にdevの中に、これをオンにするためのjQuery内のオプションがあったことを望みます。

誰かが不思議に思っている場合は...セレクタに結果セットを返すと、有効なマッチがない場合、jQueryの開発者が意図的に決定します。つまり、要素がない可能性がある場合でも、要素のコレクションにコードを適用できます。良い例は、ページのコメント、またはチェックボックスのチェックです。要素が見つからないときにエラーが発生した場合は、コードに存在のチェックを追加する必要があります。次のトピックには詳細情報があります。 https://stackoverflow.com/a/3709823/109561

これは、生産コードをリーンにするための優れた機能です。しかし、あなたが小さなタイプミスをした場合、開発中に本当にお尻を噛むことができます。または "foobar"という名前のIDを選択しようとすると、 "foobar"というクラスを選択する必要があります。

関連する問題