4

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

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

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

编辑:

分页是我的ul,其中包含很多li与有active课程的人。

我想选择li之前的所有,li.active但不是前 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>
4

4 回答 4

3

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

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

http://jsfiddle.net/MrvDX/

于 2012-10-20T16:29:31.683 回答
1

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

为什么你必须找到活动类的 LI?为什么你还不知道这个?当然,首先是您的应用程序生成了标记。

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

于 2012-10-20T16:55:16.260 回答
0

试试这个

编辑

var pagination = $('ul');

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

工作小提琴

于 2012-10-20T16:38:32.150 回答
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/

于 2012-10-20T16:45:47.690 回答