2017-09-19 23 views
-2

我有一個div列表。如果列表超過100,我只想保留最後100個項目,並刪除(刪除)所有最後100項之前的項目。如果可能,我不想調用jQuery「remove」方法x次數,因爲這樣做可能是性能問題。我想我可能能夠使用拼接方法,但不工作:刪除一系列元素的最快方法

$(divList.children()).splice(0, divList.children().length - 100); 

任何其他建議?

編輯:我的問題似乎並不清楚,因爲下面的每個答案都會導致選擇要刪除的項目並在該選擇中調用remove方法。這會導致每次刪除每個div都會調用remove方法。我想避免這種情況,因此我上面發佈的解決方案,我認爲會一舉刪除整個陣列範圍。我正在尋找一種不使用remove方法的解決方案。

+0

可以像'divList.children()濾波器( ':LT(' +(divList.children()長度 - 100)+ ')')除去();' – Satpal

+0

你得到什麼錯誤 – krishnar

+0

我不明白,爲什麼你不想使用刪除方法? – SilverSurfer

回答

0

如果他們是在同一水平上,你可以嘗試像

$('div:nth-of-type(2) ~ div').remove(); //replace 2 with 100 

$('div:nth-of-type(2) ~ div').remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div>1</div> 
 
<div>2</div> 
 
<div>3</div> 
 
<div>4</div> 
 
<div>5</div>

這裏,在上面的例子中,有五個項目,並選擇選擇所有在第二個div元素之後的div元素,在你的情況下它是100.其餘的將被刪除。

+0

與調用remove x次不同,它會不會基本上是一樣的嗎? – AndroidDev

+0

Op說'保持'最後 –

+0

@DarrenSweeney如果是這樣的話 - https://jsfiddle.net/j5tkwk39/ –

0

使用:gt()選擇

它開始在0

描述:比所述匹配組內的索引更大的指數下選擇所有元素。

$("div:gt(2)").remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div>1</div> 
 
<div>2</div> 
 
<div>3</div> 
 
<div>4</div> 
 
<div>5</div>

+0

與Alien先生的回答相同,這是保留第一個,op表示保留最後一個 –

+0

不,我想刪除最後100個項目之前的所有項目。 Guradio的解決方案是正確的,但如果列表中有成千上萬的項目,這將是一個性能問題。 – AndroidDev

0

試試這個它很簡單

$("div:lt(100)").remove() 

要不試試this.Its快速

divlist = $("container") 
divlist.children().splice(0,divlist.children().length-100).remove() 
+0

這只是一個選擇。您仍然需要刪除項目。我想避免調用remove方法x次。 – AndroidDev

+0

「lt」表現很差。如果我必須使用remove方法,那麼我會選擇使用slice方法。請參閱http://api.jquery.com/lt-selector/ – AndroidDev

0

您可以使用nextUntil()實現這一目標,例如:

$(開始).nextUntil(完)

$("div:eq(0)").nextUntil("div:eq(4)").remove() 
 
$("div:eq(0)").remove()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div>1</div> 
 
<div>2</div> 
 
<div>3</div> 
 
<div>4</div> 
 
<div>5</div> 
 
<div>6</div>

你可以把它放在一個函數內並在每次需要一次刪除很多div時調用它。

0

可以連同.filter()方法

var divList = $(".container").children(); 
 
divList.filter(':lt(' + (divList.length - 2) + ')').remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div>1</div> 
 
    <div>2</div> 
 
    <div>3</div> 
 
    <div>4</div> 
 
    <div>5</div> 
 
</div>


使用:lt()選擇器作爲選擇可以使用splice()以提取需要存在和更新使用.html()容器唯一元件

var container = $(".container"); 
 
var divList = container.children(); 
 
container.html(divList.splice(divList.length - 2)) ;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <div>1</div> 
 
    <div>2</div> 
 
    <div>3</div> 
 
    <div>4</div> 
 
    <div>5</div> 
 
</div>

+0

上的其他註釋這與下面的其他解決方案類似,每次移除每個div都會調用remove方法。尋找更高性能的解決方案,因爲我可以有數千個div的刪除。 – AndroidDev

+0

@AndroidDev *我可以有數千個div來刪除* - 你的方法是錯誤的。 –

相關問題