Как упростить фрагмент jquery if / else - PullRequest
3 голосов
/ 08 февраля 2011

У меня есть супер длинный фрагмент jquery, который, я чувствую, можно упростить с помощью правильной логики.Я боюсь прикасаться к нему, так как я наконец-то заставил его работать.

"else $ target = #none" - это буквально выражение "пока ничего".Я не был уверен, как это выразить лучше.

Большое спасибо!-зема

PS.ссылки на сайты медицинской марихуаны, так что ссылки NSFW!

    $(function () {
    var $target = $('#CO1');
    if (mmjsRegion == 'CO') {
        $target = $('#CO1');
    } else {
        $target = $('#none');
    }
    $target.imBannerRotater({
        return_type: 'json',
        data_map: {
            image_name: 'name',
            url_name: 'url'
        },
        image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/CO1.php',
        base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
    });
});

$(function () {
    var $target = $('#CO2');
    if (mmjsRegion == 'CO') {
        $target = $('#CO2');
    } else {
        $target = $('#none');
    }
    $target.imBannerRotater({
        return_type: 'json',
        data_map: {
            image_name: 'name',
            url_name: 'url'
        },
        image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/CO2.php',
        base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
    });
});
$(function () {
    var $target = $('#CO3');
    if (mmjsRegion == 'CO') {
        $target = $('#CO3');
    } else {
        $target = $('#none');
    }
    $target.imBannerRotater({
        return_type: 'json',
        data_map: {
            image_name: 'name',
            url_name: 'url'
        },
        image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/CO3.php',
        base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
    });
});
$(function () {
    var $target = $('#CA1');
    if (mmjsRegion == 'CA') {
        $target = $('#CA1');
    } else {
        $target = $('#none');
    }
    $target.imBannerRotater({
        return_type: 'json',
        data_map: {
            image_name: 'name',
            url_name: 'url'
        },
        image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/CA1.php',
        base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
    });
});
$(function () {
    var $target = $('#CA2');
    if (mmjsRegion == 'CA') {
        $target = $('#CA2');
    } else {
        $target = $('#none');
    }
    $target.imBannerRotater({
        return_type: 'json',
        data_map: {
            image_name: 'name',
            url_name: 'url'
        },
        image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/CA2.php',
        base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
    });
});
$(function () {
    var $target = $('#CA3');
    if (mmjsRegion == 'CA') {
        $target = $('#CA3');
    } else {
        $target = $('#none');
    }
    $target.imBannerRotater({
        return_type: 'json',
        data_map: {
            image_name: 'name',
            url_name: 'url'
        },
        image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/CA3.php',
        base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
    });
});

Ответы [ 4 ]

2 голосов
/ 08 февраля 2011

Это должно сделать это:

var r = mmjsRegion,
    s = r == 'CO' ? '#CO1, #CO2, #CO3' : r == 'CA' ? '#CA1, #CA2, #CA3' : '';

$(s).each(function() {
    $(this).imBannerRotater({
        return_type: 'json',
        data_map: {
            image_name: 'name',
            url_name: 'url'
        },
        image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/' + this.id + '.php',
        base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
    });
});
2 голосов
/ 08 февраля 2011

Да, я думаю, что это может привести к:

(function($) {
    $.each(['CO1', 'CO2', 'CO3', 'CA1', 'CA2', 'CA3'], function(index, id) {
        $('#' + (mmjsRegion == id.replace(/\d+$/,'') ? id : 'none')).imBannerRotater({
            return_type: 'json',
            data_map: {
                image_name: 'name',
                url_name: 'url'
            },
            image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/' + id + '.php',
            base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
        });
    });
})(jQuery);

Так как mmjsRegion не изменяется во время кода, он может уменьшиться даже больше, но я не знаю, должен ли плагин imBannerRotate() вызываться три раза $('#none'), как хак. Если $('#none') не требуется, тогда это может быть:

(function($) {
    $.each(['1', '2', '3'], function(index, id) {
        $('#' + mmjsRegion + id).imBannerRotater({
            return_type: 'json',
            data_map: {
                image_name: 'name',
                url_name: 'url'
            },
            image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/' + mmjsRegion + id + '.php',
            base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
        });
    });
})(jQuery);
2 голосов
/ 08 февраля 2011
$(function(){

    var targets = ['CO', 'CA'];
    var iterations = 3;

    $.each(targets, function(index, value){

        for(var i=1; i<=iterations; i++)
        {
            var targetId = '#' + value + i.toString();
            $target = $(targetId);

            if (mmjsRegion == value) {
                $target = $(targetId);
            } else {
                $target = $('#none');
            }

            $target.imBannerRotater({
                return_type: 'json',
                data_map: {
                    image_name: 'name',
                    url_name: 'url'
                },
                image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/' + value + i.toString() + '.php',
                base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/'
            });

        }
    });
});
2 голосов
/ 08 февраля 2011
$(["CO;CO1", "CO;CO2", "CO;CO3", "CA;CA1", "CA;CA2", "CA;CA3"]).each(function() {

      var data = this.split(";");
      var id = data[1];
      var region = data[0];

      var $target  = $("#" + id);
      if ( mmjsRegion == region ){
        $target = $("#" + id);
      }
      else{
          $target = $('#none');
        }

      $target.imBannerRotater({
        return_type: 'json',
        data_map: {
          image_name: 'name',
          url_name: 'url'
        },
        image_url: 'http://www.kindreviews.com/wp-content/plugins/geoads/' + id + '.php',
        base_path: 'http://www.kindreviews.com/wp-content/plugins/geoads/images/',
      });

});

Я не вижу причины этого ..

var $target  = $('#CO1');
      if ( mmjsRegion == 'CO' ){
        $target = $('#CO1');
      }
      else{
          $target = $('#none');
        }
...