2011-09-02 63 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

相關問題