jquery,使用$ .each()向选择

时间:2016-07-29 16:28:42

标签: jquery

我正在尝试使用月度值填充两个<select>元素。我试图使用jQuery的$.each()来实现这一点,而不是重复这样做的逻辑。这是一些代码:

for ( var i = 0; i < 12; i++ )
{
  var cm = moment().month(i);
  $( '#m1, #m2' ).each( function( i, el ) {
    $( el ).append( $( "<option />" ) ).val( cm.format( "MM" ) ).text( cm.format( "MMM" ) ) ;
  });
}

我认为理论上我正在尝试做的是正确的,只是在语法上不符合jQuery。我遇到的问题是没有附加option个元素。如果我单独替换$.each()代码和$( '#m1' )以及$( '#m2' )完全相同的内容,它就会起作用。所以问题很可能在于我如何使用$.each()

这是使用jQuery 3.1.0。

2 个答案:

答案 0 :(得分:1)

您将.val().text()分配给了错误的元素。您的.append()行应如下所示:

$(el).append( $("<option />").val(cm.format( "MM" )).text(cm.format( "MMM" )) ) ;

同样,最简单的方法是完全避免.each()循环,只需调用.append()方法:

$("#m1, #m2").append( $("<option />").val(cm.format( "MM" )).text(cm.format( "MMM" )) );

答案 1 :(得分:-1)

试试这种方式

for ( var i = 0; i < 12; i++ )
{
  var cm = moment().month(i);
  $( '#m1, #m2' ).append('<option value="'+cm.format( "MM" )+'">'+cm.format( "MMM" )+'</option>"' ) ;
}

Working fiddle

或者这样,如果你想要你的风格

for ( var i = 0; i < 12; i++ )
{
  var cm = moment().month(i);
  $( '#m1, #m2' ).append($('<option/>').val(cm.format( "MM" )).text(cm.format( "MMM" ))) ;
}

Working fiddle