2012-06-27 18 views
5

私は例えば、他の要素とその場で作成されている要素の生成されたシリーズをラップしようとしています:私の予想結果はjQueryのwrapAllは期待通りに動作しない

<ul> 
    <li>test1</li> 
    <li>test2</li> 
</ul> 

var innerHtmlAsText = "<li>test1</li><li>test2</li>"; 
var wrapper = "<ul />"; 

$("div#target").append($(innerHtmlAsText).wrapAll(wrapper)); 

ある

実際の結果は次のとおりです。

<li>test1</li> 
<li>test2</li> 

li要素はラップされません。私のインスタンスでは、innerHtmlはユーザー生成テンプレートからオンザフライで生成され、ラッパーは別途提供されます。内側の値をラップするにはどうすればよいですか?

+1

'$(ラッパー).append(innerHtmlAsText).appendTo( 'のdiv#ターゲット');'ネストされたjQueryの呼び出しをせずに、同じことをするだろう。 – Yoshi

答えて

8

wrapAllは、元のjQueryオブジェクトを返します。新しいオブジェクトではありません。だから、wrapAllwrapAllが呼び出されたオブジェクトなので、<li>を返しています。

はこれを試してみてください:wrapAllは、ラッパーを返しますが、それは(最もjQueryの関数など)に適用し、元のオブジェクトはありませんので、

$("div#target").append($(innerHtmlAsText).wrapAll(wrapper).parent()); 
+0

私はちょうどこのようなものを書いていました... – elclanrs

+1

@elclanrs:偉大な心は似ていると思います:-) –

2

起こること。

使用.parent()は、それが唯一の.append()でも可能..です

$("div#target").append($(innerHtmlAsText).wrapAll(wrapper).parent()); 
1

ul要素を取得します。

var innerHtmlAsText = "<li>test1</li><li>test2</li>"; 
var wrapper = "<ul/>"; 

$("div#target").append($(wrapper).append(innerHtmlAsText)); 

DEMO

+0

@ilivewithian私はそのことが '.append'でできると思います – thecodeparadox

+0

+1これは私が考える最高のアプローチです。 – defau1t

関連する問題