2010-05-30 29 views
2

我試圖從<ul>元素中刪除最後一個<li>元素,僅當它超過特定長度時。對於這一點,我做這樣的事情:檢查ul的長度並刪除li元素

var selector = "#ulelement" 
if($(selector).children().length > threshold) { 
    $(selector + " >:last").remove(); 
} 

我不喜歡這樣的事實,我有兩次使用選擇。有沒有更簡單的方法來做到這一點?像「刪除 - 如果長度 - 大於閾值」的想法。我在想,也許有一種方法可以使用live()函數來做到這一點,但我不知道如何。

回答

10

緩存選擇器的結果是很常見的。在這裏,你可以搜索<li>小號直接:

var lis = $("#ulelement li"); 
if(lis.length > threshold) { 
    lis.eq(lis.length - 1).remove(); 
} 

在這種情況下,你也可以用一個選擇實現這一目標:

$("#ulelement li:gt(4):last").remove(); 

那就是:在所有<li>與指數大於4(或您的門檻),選擇最後一個並將其刪除。

+0

令人驚歎..非常感謝。 – Legend 2010-05-30 05:22:51

+0

+1常用和建議 – 2010-05-30 08:42:55

+0

節省一段時間循環,並且非常有效的+1 – RobertPitt 2010-05-30 14:49:44

4
var ul = document.getElementById('myUL'); 
if (ul.childNodes.length > threshold) 
    ul.lastChild.parentNode.removeChild(ul.lastChild); 

希望有所幫助。

+0

+1爲答案。出於好奇,我只是在尋找一個基於jQuery的解決方案,但無論如何感謝。 – Legend 2010-05-30 05:23:22

+0

我一直在尋找一種簡單的JavaScript方式來做到這一點,但所有的例子都是JQuery。這太棒了!謝謝! – Arcana 2014-12-28 02:45:24

1
selector = '#ulelement'; 
while($(selector).children().length > threshHold) 
{ 
    $(selector + " li:last").remove(); 
} 

嘗試使用while循環,因爲您的代碼只運行一次,while while循環直到它小於thresh hold!

+2

如果我理解得很好,Legend只想刪除最後一個項目,而不是每個超過閾值的項目。在後一種情況下,我會使用li:gt()而不是li:最後 – FelipeAls 2010-05-30 05:03:48

+0

對於while構造也是如此。謝謝你的時間。 – Legend 2010-05-30 05:23:40

+0

沒問題,我的理解是,如果列表元素大於閾值,那麼他希望刪除所有推送列表高於該閾值的元素,以使列表成爲網頁上的正確高度。 作爲即時通訊使用remove()而不是hide()該元素消失,以便當循環再次啓動時它有一個新的長度等等 – RobertPitt 2010-05-30 14:48:57