3

私はこれを期待します:

$('.iat_map').each(function(i,el) {
    $(el).html(opt_list);
});

この:

$('.iat_map').html(opt_list);

同じことをすること。ただし、前者を試してみると、。に置き換えるのではなく、内容がクリアされopt_listます。(.iat_mapの束を指します<selects>)。

そのconsole.log(opt_list)中にいるとeach()、期待通りに出力されます。

何が得られますか?

フィドルを作りました。完全に再現可能(少なくともChrome 21では)。

4

4 に答える 4

2

問題はopt_list、jQuery オブジェクト (jQuery がオプションを DOM 要素にしたことを意味します) であり、jQuery オブジェクトを追加すると、DOM 要素が古い場所から削除され、新しい場所に追加されることです。

そのため、 を使用する.eachと、オプションが最後の選択にのみあることに気付くでしょう。

どうやら、$('.iat_map').html(opt_list);そうすると、jQuery は追加する前に DOM 要素を複製します。

opt_listjQuery オブジェクトではなく、文字列にすることをお勧めします。

于 2012-08-10T23:06:25.373 に答える
2

何が起こっているのかわかりません。問題を引き起こしている可能性があると思われる多くのことを試しましたが、これまでのところ解決策を見つけることができませんでしたが、これが私が行う方法であり、機能します。

var options = [
    [1, "one"],
    [2, "two"],
    [3, "three"]
];

var list = [];
for (var i in options) {
    list.push(
        '<option value="'+ options[i][0] +'">'+
            options[i][1] +            
        '</option>'        
    );
}

$('.sel').empty().append(
    '<option>&ndash; Not selected &ndash;</option>'+
    list.join('')
);

デモ: http://jsfiddle.net/elclanrs/U9agP/4/

于 2012-08-10T23:00:30.360 に答える
1

リストのクローンが必要でした。http://jsfiddle.net/mnbayazit/U9agP/5/

それらは参照であるため、要素を次から<select>次へと移動していました。

于 2012-08-10T23:05:33.040 に答える
0

jQuery のドキュメントによると、jQuery オブジェクトの each への呼び出しは、汎用配列で使用する呼び出しとは少し異なります。

をなくして、代わりelに使用してみてください。this

$(this).html(opt_list);

http://api.jquery.com/each/

于 2012-08-10T22:57:38.930 に答える