Оптимизировать функцию jQuery - PullRequest
1 голос
/ 18 мая 2011

Возможно ли оптимизировать и минимизировать эту функцию выборки? Как я мог это сделать?

$(function () {
    $("#options").change(function () {
        var message_index = $("#options").val();
        if (message_index == 0) {

            $("#display_image").show();
            $("#display_flash, #display_youtube, #display_google").hide();

        } else if (message_index == 1) {

            $("#display_flash").show();
            $("#display_image, #display_youtube, #display_google").hide();

        } else if (message_index == 2) {

            $("#display_youtube").show();
            $("#display_image, #display_flash, #display_google").hide();

        } else if (message_index == 3) {

            $("#display_google").show();
            $("#display_image, #display_flash, #display_youtube").hide();

        } else {

            $("#display_image, #display_flash, #display_youtube, #display_google").hide();

        }

    });

});

Ответы [ 6 ]

5 голосов
/ 18 мая 2011
$(function () {

    var $displays = $("#display_flash, #display_youtube, #display_google, #display_image"),
        toShow = ['image','flash','youtube','google'];
    $("#options").change(function () {
        $displays.hide();
        $("#display_"+toShow[$(this).val()]).show();
    });

});
2 голосов
/ 18 мая 2011

Не очень много оптимизаций, но, конечно, чище ИМО:

$(function () {
    $("#options").change(function () {
        // hide everything
        $("#display_image, #display_flash, #display_youtube, #display_google").hide();

        switch ($("#options").val()) {
            case 0:
                $("#display_image").show();
                break;
            case 1:
                $("#display_flash").show();
                break;
            case 2:
                $("#display_youtube").show();
                break;
            case 3:
                $("#display_google").show();
                break;
        }
    });

});

Чтобы минимизировать, используйте http://jscompress.com/

1 голос
/ 18 мая 2011

С вашим текущим кодом вы могли бы сделать что-то вроде этого:

$("#options").change(function () {
    var message_index = $("#options").val();
    var elemIds=[
        '#display_image', 
        '#display_flash', 
        '#display_youtube', 
        '#display_google'];
    $(elemIds.join(',')).hide();
    if (elemIds[message_index]) {
        $(elemIds[message_index]).show();
    }
});

Вы не предоставили разметку, на которой вы работаете, на этом основании возможна дальнейшая оптимизация.Возможно добавление общего класса для этих отображаемых элементов.Если в разметке элементы расположены в правильном порядке (аналогично порядку message_index), вы можете пойти еще дальше с оптимизацией.

Для минификации есть несколько инструментов, которые можно использовать, другие предоставили вамнекоторые из них.

1 голос
/ 18 мая 2011

Если вы хотите минимизировать этот код, попробуйте ввести его здесь - http://www.minifyjavascript.com/

0 голосов
/ 18 мая 2011

замените ваш оператор if на оператор switch

0 голосов
/ 18 мая 2011
...