Такое поведение в некоторых местах называется «объединением». Вот общий плагин jQuery, который делает это за вас (редактирование после отличного отзыва, см. Комментарии).
// The namespace function
jQuery.coalesce = function(selectors){
var out;
$.each(selectors, function(i, v){
var el = jQuery(v);
if (el.length) {
out = el;
return false;
}
});
return out || jQuery();
};
// The jQuery plugin
jQuery.fn.coalesce = function(){
return jQuery.coalesce(this.selector.split(",")); //a little brittle
};
Итак, в мире, где #foo
не существует, а a
и div
существуют, если вы делаете:
jQuery.coalesce(["#foo", "a", "div"])
Возвращает jQuery("a")
, если #foo
не существует, или jQuery("#foo")
, если #foo
существует.
Если вам требуется использовать его в середине цепочки, вы можете использовать $("#foo, a, div").coalesce()
, но он уязвим для комманов в самих селекторах.