• WrapAll () for multiple classes with multiple appearance

    Let's say this is my 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>
    Run codeHide result

    Now I want to wrap .product-thumbnailand .product-pricein

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

    Like this

      <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>
    Run codeHide result

    This code does the trick if I have only one list item

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

    I tried each()on .product-thubnailand .product-price, but with no results.

    Does anyone know how I can do this or how this can be done with each()?

    +4
    source share
    1 answer

    Iterate over .product-titleusing the method each()and combine with the next next element using 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>
    Run codeHide result

    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>
    Hide result
    +3

    Source: https://habr.com/ru/post/1661498/


    All Articles