在$ .each循环中分配动态变量,并在jquery中单独显示

时间:2013-04-30 05:23:06

标签: jquery

我在jquery中有每个循环,如下所示

some code---------
var temp="";
var msg_html="";

$.each(_d, function(index, val) {

        var currentID=val.id;

        if(temp.match(new RegExp("(?:^|,)"+currentID+"(?:,|$)"))) {

        msg_html+'_'+currentID        += messageTemplate(val.photo, val.from_name, val.message);

        } else{

        msg_html+'_'+currentID        += messageTemplate(val.photo, val.from_name, val.message);

        temp += currentID + ",";
        }

        });


some code ------------------

如果以上代码有效,我可以显示

        $('#someID_0').html(msg_html_0);
        $('#someID_1').html(msg_html_1);
        $('#someID_2').html(msg_html_2);
        ----
        ---
        ---

此代码中的问题是“msg_html +'_'+ currentID”中的某些错误为无效赋值。还有其他动态分配方式吗?

4 个答案:

答案 0 :(得分:2)

为什么不使用关联数组而不是尝试分配不同的变量,而不是使用数组的键作为ID?

因此您的代码将是:

some code---------
var temp="";
var msg_html={};

$.each(_d, function(index, val) {

        var currentID=val.id;

        if(temp.match(new RegExp("(?:^|,)"+currentID+"(?:,|$)"))) {

        msg_html[currentID]        += messageTemplate(val.photo, val.from_name, val.message);

        } else{

        msg_html[currentID]        += messageTemplate(val.photo, val.from_name, val.message);

        temp += currentID + ",";
        }

        });


some code ------------------

然后您可以使用以下方式显示您的html:

$.each(msg_html,function(index,val){
     $('#someID_'+index).html(val);
            ----
            ---
            ---
});

答案 1 :(得分:0)

您可以使用eval

如,

$.each(_d, function(index, val) {

    var currentID=val.id;

    if(temp.match(new RegExp("(?:^|,)"+currentID+"(?:,|$)"))) {

        eval("msg_html"+'_'+currentID +" += " + messageTemplate(val.photo, val.from_name, val.message));

    } else{

        eval("msg_html"+'_'+currentID +" += " + messageTemplate(val.photo, val.from_name, val.message));

    temp += currentID + ",";
    }

});

答案 2 :(得分:0)

我不确定这是您想要的,但您可以尝试使用StartsWith选择器以及each()

$("[id^='someID_']").each(function(index) {
    $(this).html(msg_html + '_' + index);
});

Fiddle

答案 3 :(得分:0)

使用对象

var temp =“”; var msg_html = {};

$.each(_d, function(index, val) {
    var currentID = val.id;
    msg_html['_' + currentID] = '';
    if (temp.match(new RegExp("(?:^|,)" + currentID + "(?:,|$)"))) {
        msg_html['_' + currentID] += messageTemplate(val.photo, val.from_name, val.message);
    } else {
        msg_html['_' + currentID] += messageTemplate(val.photo, val.from_name, val.message);
        temp += currentID + ",";
    }
});

然后

$('#someID_0').html(msg_html._0);
$('#someID_1').html(msg_html._1);
$('#someID_2').html(msg_html._2);