Javascript 如何使用jQuery对动态生成的SELECT元素中的数据进行排序?

Javascript 如何使用jQuery对动态生成的SELECT元素中的数据进行排序?,javascript,jquery,Javascript,Jquery,我使用JQuery填充SELECT元素,以减少输出标记的大小 除了一件事之外,一切都按照我想要的方式运转;分拣 看起来,当我到达时,下面代码中的每个,JQuery都是按val值排序的,而不是按text值排序的。我希望列表按文本值排序,或者更理想地按变量dyn\u list\u product中生成列表的顺序排序 我怎样才能做到这一点 非常感谢 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8

我使用JQuery填充SELECT元素,以减少输出标记的大小

除了一件事之外,一切都按照我想要的方式运转;分拣

看起来,当我到达
时,下面代码中的每个
,JQuery都是按
val
值排序的,而不是按
text
值排序的。我希望列表按
文本
值排序,或者更理想地按变量
dyn\u list\u product
中生成列表的顺序排序

我怎样才能做到这一点

非常感谢

<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="utf-8">
    <title>Sample Code</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <script type = "text/javascript" >
      $(document).ready(function(){
      var dyn_list_product = { 10075:'abc', 10635:'def', 10246:'ghi', 10245:'jkl', 10076:'mno', 10642:'pqr', 10995:'stu', 10255:'vwx', 10230:'yz' };
      $('.jquery_list_product').append( $('<option></option>').val('').html('----------') );
      $.each( dyn_list_product , function(val, text) { $('.jquery_list_product').append( $('<option></option>').val(val).html(text) ); });
      })
    </script>
  </head>

  <body>
    <select name="insert-1[]" class="jquery_list_product"></select>
    <select name="insert-2[]" class="jquery_list_product"></select>
    <select name="insert-3[]" class="jquery_list_product"></select>
  </body>
</html>

示例代码
$(文档).ready(函数(){
var dyn_列表产品={10075:'abc',10635:'def',10246:'ghi',10245:'jkl',10076:'mno',10642:'pqr',10995:'stu',10255:'vwx',10230:'yz'};
$('.jquery\u list\u product')。追加($(''.val('.html('------------');
$.each(dyn_list_product,function(val,text){$('.jquery_list_product')。append($('.val.val.html(text));});
})

jQuery代码没有对任何内容进行排序。JavaScript中未定义对象键的迭代顺序。也就是说,您以某种顺序定义属性这一事实与
。each()
函数将属性传递给处理程序的顺序无关

改用数组:

var dyn_list_product = [ { key: '10075', val: 'abc'}, { key: '10635', val: :'def'}, ... ];
然后,您的
.each()
循环将如下所示:

$.each( dyn_list_product , function(index, obj) {
    $('.jquery_list_product').append( $('<option></option>').val(obj.key).html(obj.val) ); });
})
$。每个(动态列表)\产品、功能(索引、obj){
$('.jquery_list_product').append($('.val(obj.key.html(obj.val));});
})

@未定义的谢谢:-)这让我抓狂,
$。each()
这样先传递索引。我不明白你说的“顺序未定义”是什么意思。如果你看这个例子,顺序非常清楚,
val
部分与
html
部分相对。这是一致的,无论我生成列表的顺序如何,顺序都将始终基于jQuery的
val
@HumanBacon。each()
函数将使用
作为。。。在
循环中,或者在
Object.keys()中驱动迭代。在这两种情况下,都不能保证JavaScript运行时内部传递键/值对的顺序与定义对象时的外观有任何关系,或者之后添加属性的顺序。@HumanBacon哦,我明白我不清楚的地方了-我指的是您正在迭代的原始对象,而不是传递给
.each()
函数的参数。问题是,在检查对象时,对象的属性没有按定义的顺序显示。对于数组,可以保证特定的顺序。