如何改进这段小代码

时间:2012-10-20 16:26:41

标签: javascript jquery dom

我只是想知道如何改进这段代码:

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

我只是不喜欢.prev()链,我没有找到改进它的方法,但我确定你知道如何; - )

编辑:

分页是我的ul,其中包含很多li,其中一个人拥有active类。

我想在li之前选择所有li.active,而不是之前的前一个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>

这样就可以了:

{{1}}

4 个答案:

答案 0 :(得分:3)

您可以使用:gt()选择器。

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

http://jsfiddle.net/MrvDX/

答案 1 :(得分:1)

我认为您这样做的事实表明您的页面/应用程序的设计可以改进。

为什么你必须找到活跃类的LI?你为什么不知道这个?肯定是你的应用程序首先产生了标记。

好像你正试图从标记中确定状态,我希望从中避开。你应该有一个对象告诉你选择了哪个LI索引。然后,您可以使用更简单的jQ选择器来选择您感兴趣的索引。

答案 2 :(得分: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

答案 3 :(得分: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");

使用filter方法并将函数传递给它。

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

这是一个有效的例子。

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