2012-05-23 82 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