2011-08-25 78 views
4

使用普通的JavaScript我可以做的東西是這樣的:jQuery等同於||要麼 ??運營商

var ninjaTurtle = document.getElementById('raphael') || 
        document.getElementById('leonardo'); 

如果第一個DOM查找返回null,這是falsy,第二查詢進行評估。

jQuery函數$()總是返回我的jQuery數組類對象,即使沒有元素匹配。即使空當,這個對象不是falsy,因此下面的表達式將永遠不會計算右邊:

var ninjaTurtle = $('#raphael') || $('#leonardo'); 

那麼,什麼是使用jQuery的時候做這種回退的慣用方法是什麼?

回答

7

檢查匹配/返回元素計數會告訴你,如果你選擇匹配的東西或不... fallback是一個簡單的工具插件,它可以讓你做到這一點優雅......

jQuery.fn.fallback = function(elem) { 
    return 0 < this.length ? this : $(elem); 
}; 

這一功能的最好的部分是你可以鏈接多達需要,直到找到一個匹配的元素..

$('#raphael').fallback('#leonardo').fallback('#kilik').dosomething();

+1

我只是把同樣的東西放在一起,雖然我稱它爲'或'。也許'fallback'更具描述性。 – Guffa

+0

偉大的思想思考相似... 20分鐘前我寫了相同的功能,但認爲「停止 - 這應該被構建到jQuery中」。從這裏的答案來看,事實並非如此。 –

+0

順便說一句,我在考慮'else'和'fallback'之後命名了我的函數'或'。 –

0
var ninjaTurtle = $('#raphael').length ? $('#raphael') : $('#leonardo'); 
+1

雖然,查找'#raphael'似乎有點浪費。 – Geert

+0

@Geert:那是真的。 – Konerak

0

我沒有看到這樣做的方式。我想到的最短的事情是:

var ninjaTurtle = $('#raphael').length ? $('#raphael') : $('#leonardo'); 
+0

然而,如果找到任何東西,那麼它會搜索第一個選擇器兩次。 – Guffa