2011-06-25 57 views
8

通常,當我用jQuery選擇一個元素時,如果它找不到匹配元素,我寧願它給我一個錯誤。當它與元素不匹配時,使jQuery拋出錯誤

舉例來說,我只是有一個錯誤在那裏這失敗,因爲我改變了類ul元素:

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

是否有保證,我的jQuery的電話匹配的元素一個方便的方法?

+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; 
}; 

我真的希望有jQuery中用於開發過程中把這個上的選項。

如果有人想知道......讓選擇器返回一個結果集,當沒有有效的匹配時,這是jQuery開發人員的一個慎重決定。這意味着您可以將一些代碼應用於一組元素,即使有可能沒有。一個很好的例子是在頁面上發表評論,或選中複選框。如果在沒有找到元素的情況下拋出錯誤,那麼您必須爲代碼添加存在檢查。以下主題有更多信息: https://stackoverflow.com/a/3709823/109561

這是保持精益生產代碼的強大功能。然而,如果你犯了一個小錯誤,它可以在發展中真正地咬你;或者如果您嘗試選擇名爲「foobar」的ID,則應選擇名爲「foobar」的課程。

相關問題