2015-12-15 33 views
1

我想包裝兩個div在一個容器,但只有當他們直接跟隨另一個。在容器中包裝div如果他們直接跟着另一個jquery

TRUE

<div class="element"></div> 
<div class="element"></div> 

FALSE

<div class="element"></div> 
<p class="different-element"></p> 
<div class="element"></div> 

我知道如何使用.wrapAll('<div class="container"></div>')

只是想知道如何抓住他們遵循相互包裝他們。我在想,.next()將工作,並使用if($('.element').next('.elememt') == true) 然後,如果條件是真的包裝他們使用.wrapALL() - 但這是行不通的。

.has()將不起作用,因爲它只檢查後代。

任何建議將是偉大的。謝謝

+0

哈哈。很好的問題。但爲什麼? ':'' –

+0

如果它是純粹的表現形式,你可以使用CSS並做一些事情,比如呃...... .element:nth-​​child(odd){border-top:solid 1px red} –

回答

3

要達到此目的,您可以使用兄弟選擇器; +

var $secondElement = $('.element + .element'); 
$secondElement.add($secondElement.prev()).wrapAll('<div class="container"></div>') 

Example fiddle

注意,如果有兩個以上的兄弟姐妹.element您可能需要更復雜的邏輯。

0

也許你可以檢查下一個兄弟的指數相同

if ($(".element").next().index() == $(".element").next(".element").index()) 
{ 
    alert("yes"); 
    $(".element").wrap("<div class='container'></div>"); 
} 
else 
{ 
    alert("no"); 
} 

這裏是fiddle

1

你可以用它來檢查與+兄弟選擇,其選擇在第二天元素。擴展Rory的回答是:

var $secondElement = $('.element + .element'); 
$secondElement.add($secondElement.prev(".element")).wrapAll('<div class="container"></div>') 

注:我不得不改變我的回答有點,因爲它已經爲在由羅裏更好的方式得到回答。我並沒有刪除,因爲即使我也這麼想,因爲這是一個原創的想法。

+1

注意'prev()'是冗餘的,因爲元素本身將*只被選中,如果它的前一個兄弟是'.element';) –

+0

@RoryMcCrossan我知道。我沒有別的選擇,只能通過添加一些亂碼來最終改變,以確保它不是你的副本,雖然我們都在同一時間認爲,而且你已經在我之前發佈了10秒鐘,但它們是相同的答案。 ':P' –

相關問題