0

我在 jquery 中有 $each 循环,如下所示

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

4 回答 4

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);
            ----
            ---
            ---
});
于 2013-04-30T05:33:58.043 回答
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 + ",";
    }

});
于 2013-04-30T05:35:23.263 回答
0

使用一个对象

变种温度=“”;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);
于 2013-04-30T05:39:21.257 回答
0

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

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

小提琴

于 2013-04-30T05:36:32.117 回答