用jquery在两个h2标签之间包装一系列元素

前端之家收集整理的这篇文章主要介绍了用jquery在两个h2标签之间包装一系列元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前有一个动态创建的页面,如下所示:
<h2>a Heading</h2>
<p>a paragraph</p> 
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>
<h2>a Heading</h2>  
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>

我想要做的是使用jQuery将h2和p标签包装到下一个h2标签:例如:

<div class="headingName">
<h2>a Heading</h2>  
<p>a paragraph</p> 
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>
</div>
<div class="headingName">
<h2>a Heading</h2>  
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>  
<p>a paragraph</p>  
</div>

到目前为止,我没有成功管理这个,但已经使用来自用户代码(无法找到原始文章链接):

$('.report-content h2').each(function(){
    var $set = $();
    var nxt = this.nextSibling;
    while(nxt) {
        if(!$(nxt).is('.report-content h2')) {
            $set.push(nxt);
            nxt = nxt.nextSibling;
        } else break;
    } 
   $set.wrapAll('<div class="content" />');
});

我得到的是div只包含p标签,但需要包含相关的h2标签,通常是p标签上方的标签.

解决方法

干得好.拿下每个h2,抓住所有的sibilings直到你得到另一个h2(或者这个级别没有元素),然后将h2重新包括在集合中. Here’s the JSFiddle.
$('.report-content h2').each(function(){ 
    var $set = $(this).nextUntil("h2").andSelf();
    $set.wrapAll('<div class="content" />');
});

或正如斯科特指出的那样

$('.report-content h2').each(function(){ 
    $(this).nextUntil("h2").andSelf().wrapAll('<div class="content" />');
});

JQuery文档

> nextUntil
> andSelf

原文链接:https://www.f2er.com/jquery/179067.html

猜你在找的jQuery相关文章