0

我的脚本中有这段代码:

    var myobject = {
    'Any' : 'Any',
    '1' : 'One',
    '2' : 'Two',
    '3' : 'Three',
    '4' : 'Four',
    '5' : 'Five'
};

var select = document.getElementById("TypeList1");
for(index in myobject) {
    select.options[select.options.length] = new Option(myobject[index], index);
}

我得到这样的下拉列表:

<select id="TypeList1" class="custom1 interactive1">
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
  <option value="4">Four</option>
  <option value="5">Five</option>
  <option value="Any">Any</option>
</select>

但我想这样生成:

<select id="TypeList1" class="custom1 interactive1">
  <option value="Any">Any</option>  
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
  <option value="4">Four</option>
  <option value="5">Five</option>
</select>

有什么想法或建议吗?谢谢。

4

3 回答 3

4

您依靠关联(即非索引)结构(对象)根据索引进行输出。您的index变量实际上保存了属性的命名键,而不是它的索引。

相反,使用一个数组,它是索引的。数组中的每个条目都是一个子数组,其中包含选项的值和文本。

var arr = [
    ['Any', 'Any'],
    ['1', 'One'],
    ['2', 'Two'],
    ['3', 'Three'],
    ['4', 'Four'],
    ['5', 'Five']
];

var select = document.getElementById("TypeList1");
for (var i=0, len = arr.length; i<len; i++)
    select.options[select.options.length] = new Option(arr[i][1], arr[i][0]);
于 2013-09-05T10:16:16.193 回答
2

您可以在 for 循环之后简单地添加这一行:

jQuery('option:last').insertBefore('option:first');
于 2013-09-05T10:21:07.743 回答
0

using jQuery You can do this as below.

Change your object as below,

var myobject = {
    '1' : 'One',
    '2' : 'Two',
    '3' : 'Three',
    '4' : 'Four',
    '5' : 'Five'
};
$("<option></option>", 
     {value: "Any", text: "Any"})
    .appendTo('#TypeList1');

$.each(myobject , function(i , v){
  $("<option></option>", 
     {value: i, text: v})
    .appendTo('#TypeList1');
});

Live Demo

于 2013-09-05T10:13:49.273 回答