2014-09-12 67 views
2

好吧,这里是一些html。我有几个开端和结束班,但为了这个,我只增加了一个。在jQuery中,如何使用div封装多个元素,因为我有一个开始和结束类

<div id="DaySchedule_5amDetail"> 
    <span>&nbsp;</span> 
</div> 
<div id="DaySchedule_6amDetail"> 
    <span>&nbsp;</span> 
</div> 
<div id="DaySchedule_7amDetail" class="start"> <-- start 
    <span>&nbsp;</span> 
</div> 
<div id="DaySchedule_8amDetail"> 
    <span>&nbsp;</span> 
</div> 
<div id="DaySchedule_9amDetail"> 
    <span>&nbsp;</span> 
</div> 
<div id="DaySchedule_10amDetail" class="end"> <-- end 
    <span>&nbsp;</span> 
</div> 
<div id="DaySchedule_11amDetail"> 
    <span>&nbsp;</span> 
</div> 

我想有从类开始jQuery的包装元素,类结束一个div

我已经尝试了很多不同的东西,并通过计算器看着。

$('div.start').each(function(){ 
    $(this).nextUntil('div.end').wrap(document.createElement('div')); 
}); 

这从我发现的应该工作,但它什么都不做。它甚至没有创建一个div

$("div.start").wrapAll("<div>"); 

这创造了一个只有类开始元素div我想扩展它,直到类结束。

是否有一个明确的方式来做到这一点?我应该甚至不打扰包装或wrapAll?有没有办法在具有某个类的元素之前注入开放的div标签,并在具有某个类的元素(开始和结束)之后添加结束标记。我试过preappend并追加没有运气。

任何帮助将不胜感激。谢谢。

编辑:-------------------------------------------- ------------

选择的答案几乎工作对我来说有一些小的操作,因此这里是为我工作的代码:

$('.start').each(function(){ 
    var $nextGroup = $(this).nextUntil('.end').add(this); 
    $nextGroup.add($nextGroup.next()).wrapAll('<div class="draggableStuff">'); 
}); 

回答

4

你是八九不离十。 ...你需要wrapAll(),但是使用nextUntil()概念。

$('.start').each(function(){ 
    $(this).nextUntil('.end').wrapAll('<div class="wrapper">'); 
}); 

DEMO

如果您还需要包开始和结束使用add()添加的开始和结束元素:

$('.start').each(function(){ 
    var $nextGroup= $(this).nextUntil('.end') 
    $nextGroup.add(this).add($nextGroup.next()).wrapAll('<div class="wrapper">'); 
}); 

DEMO 2

+0

您的演示显示它的工作原理,但是当我使用该代码时,它不会创建div。我会upvote,但这个答案没有解决我的问题。 – floor 2014-09-12 19:13:53

+0

它确实创建了div,这是绿色边框来自演示的地方。检查浏览器控制台中的实时HTML,将会看到它 – charlietfl 2014-09-12 19:14:58

+0

是的,我同意你在演示中的一切正常,但它不适用于我的版本(不是演示版本)。我检查,并没有创建div。你知道调试这种行为的一种方法,所以我可以看到它为什么不被创建? – floor 2014-09-12 19:20:09

相关问题