FadeIn/fadeOut на основе логического

Мне было интересно, нужно ли мне писать:

if (status) {
    $('#status-image-' + id).fadeIn();
} else {
    $('#status-image-' + id).fadeOut();
}

или есть функция, с которой я могу предоставить свой логический статус, например:

$('#status-image-' + id).fade(status);

Я видел fadeToggle, но он не принимает логический параметр состояния.

Ответ 1

Нет, нет, но вы можете сделать так:

jQuery.fn.fadeInOrOut = function(status){
    return status ? this.fadeIn() : this.fadeOut();
}

а затем назовите его так (см. этот jsfiddle для доказательства):

$('#status-image-' + id).fadeInOrOut(status);

Это то, что вы хотели?

Ответ 2

Самый короткий путь, который я знаю, чтобы написать это, но я нахожу лично отвратительным, вот что:

$('#status-image-' + id)[status ? 'fadeIn' : 'fadeOut']();

Вы можете, конечно, просто добавить предлагаемую функцию прямо к jQuery:

(function($) {
    $.fn.fade = function() {
        var args = Array.prototype.slice.call(arguments);  
        var status = args.shift();
        var func = status ? 'fadeIn' : 'fadeOut';
        return $.fn[func].apply(this, args);
    };
})(jQuery);

Это непроверено - я просто сбил его с места.

Первый предоставленный аргумент будет вашим параметром status - остальные аргументы будут переданы в .fadeIn() или .fadeOut().