2012-02-06 17 views
0
$("#mySelect").change(function() { 

    var myVar = $('#MyDiv'); 

    for (var i=0;i<this.value;i++) 
    { 
    myVar.clone().appendTo('#formContainer'); 
    } 
}); 

読みやすさやパフォーマンスへようこそ任意の改善がjQueryの/ JavaScriptの最適化

+1

質問のこの種のhttp://codereview.stackexchange.com/ – JMax

+1

に掲載することができ、JavaScriptでそれ自身の行に{置くために悪い習慣ではないでしょうか? – ianbarker

+0

それは、読んでいます:http://javascript.crockford.com/style1.html –

答えて

3

私は@Diodeusに同意します.HTML文字列を作成して、一度に追加してください。これを試して。

$("#mySelect").change(function() { 
    var myVar = $('#MyDiv'), 
     html = [], 
     count = parseInt(this.value, 10), 
     myDivHTML = $('#MyDiv').wrap('<div />').parent().html(); 
    for (var i = 0; i < count; i++){ 
    myVar.push(myDivHTML); 
    } 
    $('#formContainer').append(html.join('')); 
}); 
4

DOMの再書き込みは最も高価です。あなたのHTMLをメモリ(または文字列)に構築し、ループの後にそれを挿入してください。

1

ここでは、(それは私がどうなるかだ)、次のとおりです。

$("#mySelect").live('change', function() { 
    var html = $('<div />').append($('#my-div').clone()); 
    for (var i = 0; i < this.value; i++) { 
     html.append(html.clone()); 
    } 
}); 

私は右だ場合、あなたは、各反復でdivの中に巣クローンしようと...私には奇妙に思われる...また使用live('change', ...);をトリガーにバインドすることができます。この場合、コードは最初のHTMLでロードされるだけでなく、AJAX経由でロードされるためにも機能します。