2

我在几个 li 中有几个 p 如下所示,还有https://jsfiddle.net/y5zn538e/

<ul>
  <li>
    <p> Hello 1</p>
    <p> Hello 2</p>
    <p> Hello 3</p>
  </li>
  <li>
    <p> Hello 4</p>
    <p> Hello 5</p>
    <p> Hello 6</p>
  </li>
</ul>

我想包装一个 div 使它像下面的第二个一样包装

<ul>
  <li>
    <p> Hello </p>
    <div>
      <p> Hello </p>
      <p> Hello </p>
    </div>
  </li>
  <li>
    <p> Hello </p>
    <div>
      <p> Hello </p>
      <p> Hello </p>
    </div>
  </li>
</ul>

我尝试如下:

 $('ul li >p:not(:first-child)').wrapAll('<div></div>'); 

但是,这似乎不起作用..我的意思是它所做的一切都需要所有 p 并包装它。我想在每个 li 中包含一个 div 吗?

4

2 回答 2

3

问题是,li > p:not(:first-child)它收集了除第一个孩子之外的所有孩子 p 标签。

所以你需要.each()对 all 使用函数迭代li

$('ul li').each(function(){
  $(this).find('p:not(:first-child)').wrapAll('<div></div>'); 
});

  $('ul li').each(function(){
     		$(this).find('p:not(:first-child)').wrapAll('<div></div>'); 
     });
div{
  color: red;
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
      <li>
         <p> Hello 1</p> 
         <p> Hello 2</p > 
         <p> Hello 3</p> 
      </li> 
      <li>
         <p> Hello 4</p> 
         <p> Hello 5</p > 
         <p> Hello 6</p> 
      </li> 
     </ul>

于 2016-07-20T04:25:20.787 回答
2

用于.each()遍历每个<li>然后操作其子级<p>

$('ul li').each(function(){
    $('> p:not(:first-child)',this).wrapAll('<div/>');
});

更新小提琴


为什么你的代码不起作用?

$('ul li >p:not(:first-child)')获取所有<p>不是其父母的第一个孩子的集合。然后将它们包裹在<div>. 此集合不考虑单独的<li>父母。

于 2016-07-20T04:24:58.297 回答