【问题标题】:WrapAll() on multiple classes with multiple appearanceWrapAll() 在具有多个外观的多个类上
【发布时间】:2017-04-05 05:44:07
【问题描述】:

假设这是我的 HTML

<ul class="products>
<li class="product">
<div class="product-title></div>
<div class="product-thumbnail></div>
<div class="product-price></div>
<div class="product-discription></div>
</li>
<li class="product">
<div class="product-title></div>
<div class="product-thumbnail></div>
<div class="product-price></div>
<div class="product-discription></div>
</li>
</ul>

现在我想将.product-thumbnail.product-price 包装起来

<div class="left"></div>

像这样

  <ul class="products>
       <li class="product">
        <div class="product-title></div>
        <div class="left">
         <div class="product-thumbnail></div>
         <div class="product-price></div>
        </div>
        <div class="product-discription></div>
       </li>

       <li class="product">
        <div class="product-title></div>
        <div class="left">
         <div class="product-thumbnail></div>
         <div class="product-price></div>
        </div>
        <div class="product-discription></div>
       </li>
    </ul>

如果我只有一个列表项,这段代码就可以解决问题

$(".product-thumbnail, .product-price").wrapAll("<div class='left'></div>");

我在.product-thubnail.product-price 上尝试了each(),但没有结果..

有谁知道我可以如何做到这一点或如何使用each() 做到这一点?

【问题讨论】:

  • 您需要整理您的代码示例并替换您省略的所有缺少的右引号
  • 这就是应该问的问题。 :)

标签: javascript jquery html wrapall


【解决方案1】:

使用each() 方法迭代.product-title,并使用add() 方法与紧邻的下一个元素组合。

$('.product-title').each(function() {
  $(this).add($(this).next()).wrapAll('<div class="left"></div>')
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="products">
  <li class="product">
    <div class="product-title"></div>
    <div class="product-thumbnail"></div>
    <div class="product-price"></div>
    <div class="product-discription"></div>
  </li>
  <li class="product">
    <div class="product-title"></div>
    <div class="product-thumbnail"></div>
    <div class="product-price"></div>
    <div class="product-discription"></div>
  </li>
</ul>

或者遍历li 并通过提供上下文来获取元素内的两个类。

$('.product').each(function() {
  $('.product-title,.product-thumbnail', this).wrapAll('<div class="left"></div>')
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="products">
  <li class="product">
    <div class="product-title"></div>
    <div class="product-thumbnail"></div>
    <div class="product-price"></div>
    <div class="product-discription"></div>
  </li>
  <li class="product">
    <div class="product-title"></div>
    <div class="product-thumbnail"></div>
    <div class="product-price"></div>
    <div class="product-discription"></div>
  </li>
</ul>

【讨论】:

  • 谢谢!,对列表项的迭代效果很好!如果 4 分钟结束,我会接受你的回答 :)
  • 感谢您的出色回答。为什么你在第二个例子中使用this
  • @Mahi : 用于在this 上下文中查找元素.....在当前li 中搜索元素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多