2009-06-15 11 views
3

グループ化する必要がある要素はたくさんありますが、変更できない機械から吐き出されているため、jqueryを使用する必要があります(これは、基本的によく知っている)jqueryを使用して要素をグループ化する

基本的に私はpタグのロードを持っていて、フォーム要素内で緩んでいます(悪いマークアップありますが、これは別の話です)。私はフィールドセットの中に次の1つまたは2つのdivでpタグをグループ化する必要があります。

、私は、各p要素の前にタグを開始し、その後閉じて、フィールドセットを挿入しようとしましたが、私が正しく理解していればそれは

+1

それはあなたがやろうとしているもの、特に明確イマイチ。 – gubby

+0

さて、私はそれをクリアしようとします。 P divの のdiv P divの のdiv P divの P divの私は内側に、次の1つのまたは2のdivでグループに各p要素を、それを行うために必要なもの :私はこのような何かを持っていますfieldset要素 – chrism

答えて

7

動作しないので、私は、法的な要素を挿入しようと、それを選別する機械を推測しますあなたはマークアップは次のようになります文書があります。

<p>paragraph 1</p> 
<div>par1 div1</div> 
<div>par1 div2</div> 
<p>paragraph 2</p> 
<div>par2 div1</div> 
<div>par2 div2</div> 
<p>paragraph 3</p> 
<div>par3 div1</div> 
<p>paragraph 4</p> 
<div>par4 div1</div> 

をそして、あなたはこのようなもので終わるしたい:これがC

<fieldset> 
<p>paragraph1</p> 
<div>par1 div1</div> 
<div>par1 div2</div> 
</fieldset> 
<fieldset> 
<p>paragraph2</p> 
<div>par2 div1</div> 
<div>par2 div1></div> 
</fieldset> 
..... 

ASE、このjQueryのスニペットは、トリックを行います:

$(function(){ 
    $('p').each(function(index,item){ 
     var nextDiv = $(item).next(); 
     var followingDiv = $(nextDiv).next('div'); 
     $(item).wrap("<fieldset id='fieldset" + index + "'></fieldset>"); 
     $("#fieldset"+index).append(nextDiv).append(followingDiv); 
    }); 
}); 
+0

ありがとう、私はあなたと同じくらい簡潔ではありませんが、同様のものを思い付くでしょう。 – chrism

1

JoseBasilloの答えは単純化され、ビットを一般化することができる:@

var $wrapper = $('#wrapper'); 
$wrapper.children('p').each(function(index,item) { 
    var $following = $(item).nextUntil('p, fieldset'); 
    $wrapper.append($('<fieldset>').append(item, $following)); 
}); 

Demo

コードが

<div id="wrapper"> 
    <p>paragraph 1</p> 
     ... (whatever but p or fieldset) 
    <p>paragraph 2</p> 
     ... (whatever but p or fieldset) 
    ... (p followed by whatever but p or fieldset) 
</div> 
を変換し、

<div id="wrapper"> 
    <fieldset> 
     ... (whatever but p or fieldset) 
    </fieldset> 
    <fieldset> 
     ... (whatever but p or fieldset) 
    </fieldset> 
    ... (fieldset containg [p followed by whatever but p or fieldset]) 
</div> 

誰かが読みやすさよりも短いコードを好む場合は、変数$followingを使用する必要はありません。

var $wrapper = $('#wrapper'); 
$wrapper.children('p').each(function(index,item) { 
    $wrapper.append($('<fieldset>').append(item, $(item).nextUntil('p, fieldset'))); 
}); 
関連する問題