2012-05-23 49 views
2

给定两个有序但不一定是连续的同胞元素,我怎样才能把html包裹起来呢?给出了两个元素,将html换成不同的元素?

$(element_a).before("<span class='wow'>"); 
$(element_b).after("</span>"); 

上述不起作用,因为它关闭了我的开标签,并没有插入后者。

(兄弟姐妹是对类型和类乌合之众,所以用片,以帮助这个任务是困难的,但也许我还没有想通了。)

+0

你是否想要包裹兄弟姐妹之间的元素? (如果它们不是连续的) – ahren

+0

如何确定是否有任何两个元素应该被视为异构?你在比较什么? – Sampson

+0

如果我正确理解你,你想在'element_a'和'element_b'(包括这两个元素)之间的所有元素上放一个单独的跨度,并且我已经在这个基础上给出了答案,但是它可能有帮助你可以提供一些简单的前后例子html ... – nnnnnn

回答

1

如果我正确理解了你的意思,那么你需要围绕element_aelement_b(含)之间的所有元素进行单一跨度。

.wrapAll() method可以做到这一点相当不错,一旦你弄清楚如何让所有这些元素连接成一个jQuery对象,但这样的事情应该工作:

var $els = $(element_a); 
$els = $els.add(els.nextUntil(element_b)).add(element_b) 

$els.wrapAll("<span class='wow' />"); 

这始于只包含一个jQuery对象element_a,然后使用.add() method.nextUntil() method添加element_aelement_b之间的所有元素,最后添加element_b

1
$("<span class='wow'></span").appendTo('#container'); 
$(element_a, element_b).each(function() { 
    $(this).clone(true).appendTo(".wow"); 
    $(this).remove() 
}) 

http://jsfiddle.net/KZtE9/1/

+1

关于'.wrap()'的事情是,它将分开包装每个元素 - 而不是在同一个包装器中。 – ahren