0

我有 2 个数组,一个带有城市,另一个带有 ID 的数组...我想循环两个数组,然后输出一些 HTML

现在我只循环城市,然后将一些 HTML 附加到如下:

if ($jq(".area").length > 0) {

    var region = $jq(".hiddenFieldRegion").val();
    var cityIDs = $jq(".hiddenFieldChosenAreas").val();
    var strcities = $jq(".hiddenFieldChosenCities").val();
    //var cities = strcities.split('|');

    //Set region to be marked
    if (region) {
        $jq(".mapdk").attr("class", region);
    }

    //Appending to searchform
    if (strcities) {
        $jq.each(strcities.toString().split("|"), function (k, v) {
            var v = v.split("|");
            $jq("<option selected />").text(v[0]).appendTo("select.chosen-cities");
        });
    }

}

我想要我附加到搜索表单的地方,添加一个属性值,并带有来自 cityIDs 数组的 ID...

所以我得到一些HTML,如:

<option value="XXX">CityName</option>

那可能吗?

4

4 回答 4

0

假设两个数组中的顺序相同,您可以使用k每个函数的索引参数 ( ):

if (strcities) {
    var aCityIDs = cityIDs.split("|");
    $jq.each(strcities.toString().split("|"), function (k, v) {
        var v = v.split("|");
        var id = aCityIDs[k];
        $jq("<option selected value='"+id+"' />").text(v[0]).appendTo("select.chosen-cities");
    });
}
于 2012-07-05T08:23:43.653 回答
0

假设您的城市 ID 和城市名称以相同的方式排序,您可以通过数组中的此索引访问每个名称/ID:

var cityIDs = $jq(".hiddenFieldChosenAreas").val();
var strcities = $jq(".hiddenFieldChosenCities").val();

var cityIDs_array = cityIds.split("|");
var strcities_array = strcities.split("|");

....

if (strcities) {
    $jq.each(strcities_array, function (k, v) {
        //var v = v.split("|"); Unnecessary if strcities is like "city1|city2|city3"
        $jq("<option value='"+cityIDs_array[k]+"' />").text(v).appendTo("select.chosen-cities");
    });
}

通过这种方式,您可以访问循环中的每个城市 ID。
但我认为您应该将城市名称和城市 ID 存储在同一个字符串中。例如"city1:1|city2:2|city3:3". 然后,通过一些split函数的使用,您将获得 id 和 name。

于 2012-07-05T08:25:04.043 回答
0

另一个例子:

var strict = ('aaa|eeee|dddd').split('|');
var id = ('1|2|3').split('|');

$.each(strict, function (k) {
            $("<option selected />").text(strict[k]).appendTo("select.chosen-cities").attr('value',id[k]);
        });
于 2012-07-05T08:25:43.397 回答
0

如果您的两个数组在索引方面彼此相同,这很容易 - 循环一个,然后在同一索引处查找另一个数组中的值。

//simulate environment
var strcities = 'one|two|three',
    cityIDs = '1|2|3';

//main code
var ids = cityIDs.split('|');
$.each(strcities.toString().split("|"), function (index, val) {
    var opt = $("<option />", {value: ids[index], text: val}).appendTo("select.chosen-cities");
    /* if (index == 2) opt.prop('selected', 'selected'); /*
});

几点注意事项:

  • 你在里面|一次又一次地分裂。$.each由于这不合逻辑(|第一次拆分后任何内容都会消失),因此我将其删除。
  • 您正在添加selected到每个选项。如果您只想选择第一个选项,则无需添加任何内容。如果您希望选择特定选项,请参阅我注释掉的行,它选择了第三个元素。

http://jsfiddle.net/DhH3U/

于 2012-07-05T08:28:42.403 回答