2011-12-14 11 views
2

多分私は単純なものを見逃しているかもしれませんが、他の誰かがこの質問をどこにでも求めているようには思えません。私はHTMLノードの新しいセクションを作成しようとしており、すべてを簡潔かつ連鎖的に行うことができるようにしたいと考えています。append()内のjQuery each()関数の使い方

基本的に私はこのような何かしたい:私はしたいのですがどのような

var options = { 
    buttons: { 
     'New': function() { /* Do some work*/ } 
     'Edit': function() { /* Do some work*/ } 
     // etc. 
    } 
}; 
$('#container').append(
    $('<div />', { 'class': 'table' }).append(
     $('<div />', { 'class': 'row' }).append(function() { 
      $.each(options.buttons, function(key, value) { 
       $('<button />', { text: key }).click(value); 
       // Somehow return this object so the append can work with it 
      }); 
     }) 
    ) 
); 

が起こると、各機能は、クリックハンドラでボタン要素を返すことができるように、それを持っていますオプションオブジェクト内の各ボタンに関連付けられています。私は同じことをしたいと思う他のオプションがありますが、構文を理解することはできません。

これは、$ .each関数に.append()関数が含まれていることを逆にして行うことができますが、これは長いコレクションではパフォーマンスが低下するようです。誰でも何か提案がありますか?

編集:以下の回避策を試してみましたが、新しい不要な要素を挿入する必要があります。代わりに$.each

$('<div />', { 'class': 'row' }).append(function() { 
    var div = $('<div />', { }); 
    $.each(options.buttons, function(key, value) { 
     div.append($('<button />', { text: key }).click(value)); 
    }); 
    return div; 
}) 

答えて

7

使用$.map

return $.map(options.buttons, function(value, key) { 
    return $('<button />', { text: key }).click(value)[0]; // return DOM node 
}); 

JSFIDDLE DEMO


あなたはアペンドの一つの機能を取り除く場合は、それを少し短くすることができます:

$('#container').append(
    $('<div />', { 'class': 'table' }).append(
     $('<div />', { 'class': 'row' }).append( 
      $.map(options.buttons, function(value, key) { 
       return $('<button />', { text: key }).click(value)[0]; 
      }) 
     ) 
    ) 
); 

JSFIDDLE DEMO

+1

素晴らしい!ありがとう!私は前に$ .map関数を見ていませんでした。私が必要としているものと正確に思える。 – legacybass

+0

ありがとう! great solution – zur4ik

2

あなたはjQuery.map()を見てみたいことがあります。

これは配列をとり、配列を返します。したがって、.appendのDOM要素の配列を返して消費することができます。

+1

私は '$ .map'でjQueryオブジェクトの配列を作成したくないことに注意したいと思います。 '.append()'を使うには、DOM要素の配列でなければなりません。 – RightSaidFred

+0

@ RightSaidFred:Ammended;ありがとう。 – Dancrumb

関連する問題