2017-03-09 10 views
0

こんにちは、私はこれを年齢のための解決策にしてきました。基本的には、次のような繰り返し構造を持っています:div内の.articleの最後の3つの子要素をラップする必要があります。jQueryで複数の繰り返し要素を折り返すwrapAll()

<div class="article"> 
    <div> 
    </div> 
    <div class="wrapper"> 
     <h2> 
     </h2> 
     <div> 
     </div> 
     <div> 
     </div> 
    </div> 
</div> 

私はjQueryの.before()と.after()が、私はそれらの両方を呼び出すことができます前に近い要素を試してみました。これは私の土壇場の努力だった:

(function($) { 
    $(document).ready(function() { 
     var items = $(".article > *"); 
     for(var i = 1; i < items.length; i+=3) { 
      items.slice(i, i+3).wrapAll("<div class='wrapper'></div>"); 
     }; 
    }); 
})(jQuery); 

これが最初.articleのために正常に動作しますが、コードの残りの部分を台無しに。

ここで実際の生活の例:要素の上に

http://www.blanketmedia.com.au/Cruise/hotnews.jsp

答えて

0

ループ、子供を選択し、最初のを削除し、それらを包みます。

$(".article").each(function() { 
 
    $(this).children().slice(1).wrapAll('<div class="wrapper"></div>'); 
 
});
.article { background: yellow; } 
 
.wrapper { background: red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="article"> 
 
    <div>1 
 
    </div> 
 
    <h2>2 
 
    </h2> 
 
    <div>3 
 
    </div> 
 
    <div>4 
 
    </div> 
 
</div> 
 
<div class="article"> 
 
    <div>5 
 
    </div> 
 
    <h2>6 
 
    </h2> 
 
    <div>7 
 
    </div> 
 
    <div>8 
 
    </div> 
 
</div>

+0

ありがとう!それは素晴らしい仕事でした。私は事を明らかに過密化していた。 – JoshEdwards

0

このお試しください:ここで

$('.article *:nth-child(3)').wrap("<div class='wrapper'></div>");

0

を別のソリューションです:

$('.article').each(function(){ 
 
    var articleChildren = $(this).children(); 
 
    var lastThreeElements = articleChildren.slice(Math.max(articleChildren.length - 3, 1)); 
 
    lastThreeElements.wrapAll('<div class="wrapper">'); 
 
});
.article { background: yellow; } 
 
.wrapper { background: red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="article"> 
 
    <div>Div 1 
 
    </div> 
 
    <h2>Header 1 
 
    </h2> 
 
    <div>Inner Div 1 
 
    </div> 
 
    <div>Inner Div 2 
 
    </div> 
 
</div> 
 
<div class="article"> 
 
    <div>Div 1 
 
    </div> 
 
    <h2>Header 1 
 
    </h2> 
 
    <div>Inner Div 1 
 
    </div> 
 
    <div>Inner Div 2 
 
    </div> 
 
</div>

+0

krixもありがとうございます。この2つの方が効率的ですか? – JoshEdwards

+0

唯一の違いは、ラップする前に配列の最後の3つの要素以外のすべてをスライスすることです。だから、あなたのdivで他にもいくつの要素が "最後の3つ"の要素の前にあるかは関係ありません。 – krix