2017-08-10 67 views
1

我有這個示例代碼,我想隱藏所有內容行> 5並添加一個鏈接來顯示/隱藏更多。jquery包圍前5個元素和最後一個元素周圍的另一個div

<div class="wb-allview-cat-cnt wb-col-xs-12 wb-col-sm-12 wb-col-md-3"> 
    <div class="wb-row"> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
    </div> 
</div> 

<div class="wb-allview-cat-cnt wb-col-xs-12 wb-col-sm-12 wb-col-md-3"> 
    <div class="wb-row"> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
    </div> 
</div> 

<div class="wb-allview-cat-cnt wb-col-xs-12 wb-col-sm-12 wb-col-md-3"> 
    <div class="wb-row"> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
     <div class="wb-col-md-12">Content</div> 
    </div> 
</div> 

我試過,但它不工作,種了困在這裏

$('.wb-row > div:lt(5)').wrapAll('<div class="first5"></div>'); 
+0

如果你想「隱藏所有內容行> 5「,那麼你爲什麼要做'div:lt(5)'?你不想要'div:gt(4)' – j08691

+0

我只是嘗試了一些東西,看看有什麼作品,也許我會圍繞首先和最後一個div和顯示/隱藏這些...如果任何人有更好的解決方案的幫助是歡迎:) – Dieter

+0

像這樣 - > ** https://jsfiddle.net/ggeaacuz/** – adeneo

回答

1

要做到這一點,你需要使用:gt(4)hide()。您可以append()你勾Click事件處理程序的a元素,然後顯示所有在.wb-row同級div元素,像這樣:

$('.wb-row').each(function() { 
 
    var $row = $(this), 
 
    $divs = $row.find('.wb-col-md-12'); 
 

 
    if ($divs.length >= 5) { 
 
    $divs.filter(':gt(4)').hide(); 
 
    $row.append('<a href="#" class="show-more">Show more...</a>'); 
 
    } 
 
}); 
 

 
$('.wb-row').on('click', '.show-more', function(e) { 
 
    e.preventDefault(); 
 
    $(this).text(function(i, t) { 
 
    return t == 'Show more...' ? 'Hide' : 'Show more...'; 
 
    }).siblings('div:gt(4)').toggle(); 
 
});
.wb-row { 
 
    margin: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="wb-allview-cat-cnt wb-col-xs-12 wb-col-sm-12 wb-col-md-3"> 
 
    <div class="wb-row"> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    </div> 
 
</div> 
 

 
<div class="wb-allview-cat-cnt wb-col-xs-12 wb-col-sm-12 wb-col-md-3"> 
 
    <div class="wb-row"> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    </div> 
 
</div> 
 

 
<div class="wb-allview-cat-cnt wb-col-xs-12 wb-col-sm-12 wb-col-md-3"> 
 
    <div class="wb-row"> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    <div class="wb-col-md-12">Content</div> 
 
    </div> 
 
</div>

+0

似乎在這裏工作很好的片段,但我用它在我的代碼它隱藏除了第一個和所有顯示不起作用。 這可能是因爲我有更多的div裏面這些

Content
我認爲這行︰$ divs = $ row.find('div');應該只針對直接的孩子? – Dieter

+0

我更新了代碼以使用'.wb-col-md-12'類 - 但是這不是很理想,因爲這是一個演示類。這意味着如果你改變列寬,你將不得不改變JS,這是不理想的。 –

+0

它似乎在您的網站在Chrome瀏覽器中工作正常59 –