2012-10-20 23 views
4

我只是想知道如何改進這個代碼:如何提高這小小的一段代碼

pagination.children('li.active').prev().prev().prev().prev().prevAll('li.pgn').css("display","none"); 

我只是不喜歡.prev()鏈,我沒有找到一個方法來改善,但我敢肯定你知道;-)

編輯如何:

分頁是我ul其中含有大量的li一個誰擁有active類。

我想選擇li.active之前的所有li,但不是前面的前5個。

爲例(忘記pgn類):

<li></li> 
<li></li> 
<li></li> 
<li></li> 
<li></li> 
<li></li> 
<li></li> 
<li class="active"></li> 

這將會給這樣的:

<li style="displat: none;"></li> 
<li style="display: none;"></li> 
<li></li> 
<li></li> 
<li></li> 
<li></li> 
<li></li> 
<li class="active"></li> 
+8

您是否也可以提供HTML標記? – insertusernamehere

+0

編輯解釋更好。 –

+0

沒有足夠的編輯 –

回答

3

可以使用:gt()選擇。

pagination.children('li.active').prevAll('li:gt(4)').hide(); 

http://jsfiddle.net/MrvDX/

+0

pagination.find('li.active')。prevAll。( 'li.pgn:GT(3)')的CSS( 「顯示」, 「無」);工作。非常感謝 ! –

+0

使用.hide()...更清潔:) – BZink

+0

是的,我會使用.hide()。這個解決方案有效,但我不知道/明白爲什麼。 –

0

試試這個

編輯

var pagination = $('ul'); 

var len = pagination.find('li.active').prevAll('li').length; 
pagination.find('li.png').slice(0 , len-5).css('display','none')​​​​​​​​​​​​​​​​​; 

WORKING FIDDLE

+0

不起作用,但謝謝您的嘗試 –

+0

請在此處嘗試編輯代碼 –

0

你可以嘗試這樣的事情......

var $prevAll = pagination.children('li.active').prevAll('li.pgn'); 
var prevCount = $prevAll.length; 

$prevAll.filter(function(index){ 
    return (prevCount - index < 5) 
}).hide() //instead of - .css("display", "none"); 

使用過濾方法並將函數傳遞給它。

http://api.jquery.com/filter/

這裏的工作的例子。

http://jsfiddle.net/aTzzK/2/

1

我覺得你這樣做是這樣的事實表明這樣一個事實,你的頁面/應用程序的設計可以提高。

爲什麼你需要找到與活動類的LI?你爲什麼不知道這個?當然,它是你的應用程序,首先產生標記。

看起來好像您試圖從標記中確定狀態,而我喜歡從標記中確定狀態。你應該有一個對象,告訴你選擇了LI的哪個索引。然後,您可以使用更簡單的jQ選擇器來選擇您感興趣的索引。

+0

OP。我意識到你是對的,所以我已經將活動的li保存在var中,所以我不必每次都找到它。 –

+0

@MarcDupuis良好的工作:) –