我怎样才能抽出这个.each函数?

时间:2014-10-02 21:23:29

标签: javascript each

我在一些javascript中有一个switch case语句,然后需要运行相同的.each函数,只需更改参数。

$('#item_type').change(function() {
        switch(this.value) {
            case 'CH':
                $('#item_code').empty();
                $.each(cheeses, function(key, value) {   
                     $('#item_code')
                    .append($("<option></option>")
                    .attr("value",key)
                    .text(value));
                }); 
                break;

            case 'Z':
                $('#item_code').empty();
                $.each(sizes, function(key, value) {   
                     $('#item_code')
                    .append($("<option></option>")
                    .attr("value",key)
                    .text(value));
                }); 
                break;
        }

    });

如何更改内容以便.each函数只定义一次,并且可以在各种情况下调用,如下所示:

case 'CH':
    $('#item_code').empty();
    doEach(cheeses);
    break;
case 'Z':
    $('#item_code').empty();
    doEach(sizes);
    break;

2 个答案:

答案 0 :(得分:3)

您可以将每个函数存储在变量中,然后将其传递给.each,如下所示:

var addOptions = function(key, value) {   
                 $('#item_code')
                .append($("<option></option>")
                .attr("value",key)
                .text(value));
            };

$('#item_type').change(function() {
    switch(this.value) {
        case 'CH':
            $('#item_code').empty();
            $.each(cheeses, addOptions); 
            break;

        case 'Z':
            $('#item_code').empty();
            $.each(sizes, addOptions); 
            break;
    }

});
祝你好运!

答案 1 :(得分:1)

非常直接的方法是:

function doEach(collection) {
    $.each(collection, function(key, value) {   
        $('#item_code')
            .append($("<option></option>")
            .attr("value",key)
            .text(value));
    });
}

或者您可以使用非常简单的插件:

$.fn.populate = function (collection) {
    return this.each(function () {
        var $self = $(this).empty();
        $.each(collection, function (key, value) {
            $('<option>').attr('value', key).text(value).appendTo($self);
        });
    });
};

$('#item_type').change(function () {
    switch (this.value) {
        case 'CH':
            $('#item_code').populate(cheeses);
            break;

        case 'Z':
            $('#item_code').populate(sizes);
            break;
    }
});