2013-03-18 59 views
1

我想将<h2><table>的每一套都包装在它们自己的<div>之内,这样我就可以使用CSS来操纵新的容器。如何使用jQuery来包装每一组物品?

下面是我一起工作的HTML的一个简化版本:

<div> 
<h3></h3> 
<h2 class="product-line-term-name">Product 1</h2> 
<table class="views-view-grid"></table> 
<h3></h3> 
<h2 class="product-line-term-name">Product 2</h2> 
<table class="views-view-grid"></table> 
<h3></h3> 
<h2 class="product-line-term-name">Product 3</h2> 
<table class="views-view-grid"></table> 
</div> 

注:我只在主题层上工作,所以的jQuery(1.3.2版本)和CSS是我的工具。

+0

为什么你不能只是操纵标签是用css? – lukeocom 2013-03-18 06:33:54

回答

0

看看这段代码

jQuery.each($('.product-line-term-name'), function(i, val) { 
    //Create new element 
    var div = "<div>" + $(this)[0].outerHTML + $(this).next()[0].outerHTML + "</div>"; 

    $(this).prev().after(div); 
    $(this).next().remove(); 
    $(this).remove(); 
}); 

See fiddle

+0

这为我在当前安装在网站上的jQuery(1.3.2)版本工作。 – JCL 2013-03-18 07:25:59

2

您可以使用nextUntilwrapAll在这种情况下:

$('h3').each(function(){ 
    $(this).nextUntil('h3').wrapAll('<div class="example" />'); 
}); 

演示:http://jsfiddle.net/9w9Sp/

+0

这将工作很好,但我只是意识到该网站正在运行jQuery 1.3.2和.nextUntil被添加到1.4 – JCL 2013-03-18 06:39:54

+0

然后,我建议你升级你的版本,因为1.3.2是相当古老,可能缺乏很多有用的功能 – Eli 2013-03-18 06:42:38

0

我认为以下代码将发挥作用你的目的为jQuery 1.3.2:

var h3_length = $('h3').length; 

for(var i= h3_length - 1; i>= 0; i--) { 
    $('h3').eq(i).nextAll().not(".test, h3").wrapAll('<div class="test" />'); 
}