1

これを変換する必要があります:

<div id="truc">
   <p>First</p>
      <li>Item one</li>
      <li>Item two</li>
      <li>Item three</li>

  <p>Second</p>
    <li>Item four</li>
    <li>Item five</li>
    <li>Item six</li>
</div>

これに:

<div id="truc">
   <p>First</p>
    <ul id="list1">
       <li>Item one</li>
       <li>Item two</li>
       <li>Item three</li>
    </ul>

   <p>Second</p>
    <ul id="list2">
       <li>Item four</li>
       <li>Item five</li>
       <li>Item six</li>
    </ul>
</div>

私はそのようなもの、jqueryでwrapAllを使用しようとしました:

$('#truc p~li').each(function() {
   $(this).wrapAll('<ul>');
});

どんな提案でも本当に感謝します:) どうもありがとうございました!

4

1 に答える 1

2

この特定の構造では以下を使用できます。

$('p', '#truc').each(function() {
    $(this).nextUntil('p').wrapAll('<ul>');
});

出力 (デモ):

<div id="truc">
   <p>First</p>
   <ul>
      <li>Item one</li>
      <li>Item two</li>
      <li>Item three</li>
   </ul>
   <p>Second</p>
   <ul>
      <li>Item four</li>
      <li>Item five</li>
      <li>Item six</li>
   </ul>
</div>

ID については、次のことができます ( demo ):

$('p', '#truc').each(function(i) {
    $(this).nextUntil('p').wrapAll($('<ul>', {id: 'list' + (1 + i)}));
});

元のアプローチの問題:

$('#truc p~li').each(function() {
   $(this).wrapAll('<ul>');
});

つまり、セレクターは#truc p~liすべて <li>要素を照合し (各要素のグループ化ではなく)、一致 (要素)内の項目を要素で<p>ラップします。<li><ul>

于 2011-11-17T08:46:05.620 に答える