2011-06-05 37 views
1

如何找到使用jQuery的最大“页面”值小于“6”的元素?jQuery中的最小/最大功能

假设“页面”只有数值,并且元素按“页面”排序。例如:

<div id="wrapper"> 
    <div page="1"></div> 
    <div page="2"></div> 
    <div page="4"></div>  => answer 
    <div page="6"></div> 
    <div page="7"></div> 
    <div page="9"></div> 
</div> 
+0

是否需要用jQuery来完成? – GolezTrol 2011-06-05 10:12:44

+0

这样做没有内置的jQuery支持,它只是遍历元素并访问它们的属性比纯JS更容易。 – Alnitak 2011-06-05 10:18:49

+0

问:总是有一个元素存在你正在寻找的值(即'6')?元素是否总是在DOM树中排序(即按页面值排序)? – 2011-06-05 10:20:13

回答

2

您可以使用filter选择所有小于6的选择,然后选择最后一个。

$('#wrapper div').filter(function() { 
    return $(this).attr('page') < 6; 
}).last().css('color', 'red'); 

例如:http://jsfiddle.net/niklasvh/rFYfM/

+2

这只适用于元素已经排序的情况。 – 2011-06-05 10:17:14

+0

我刚写完完全一样的代码(但没有css) – 2011-06-05 10:18:10

+0

@Felix Kling好点。我从这个问题推测他们是 – Niklas 2011-06-05 10:20:42

2

因为你没有(原来)指定列表是否排序,我假设他们没有,在这种情况下,你必须遍历所有元素,并记录一个比赛:

var maxEl = null; 
var maxNum = 0; 

$('#wrapper > div').each(function() { 
    var num = $(this).attr('page'); 
    if (num > maxNum && num < 6) { 
     maxNum = num; 
     maxEl = this; 
    } 
}); 

// result is in maxEl 

http://jsfiddle.net/alnitak/WdT2m/的工作演示

+0

感谢您的一般答复,但尼克拉斯通过这个例子猜测我的意图更好。 – 2011-06-05 10:27:00

0

这适用于未分类的列表:

i = 0; 
$('div').filter(function(){ 
    $thispage = $(this).attr('page') 
    if($thispage < 6 && $thispage > i){ 
     i = $thispage; 
     return true; 
    } 
    return false; 
}).last() 
0
$("#wrapper > div[page]") 
.filter(function() { return parseInt($(this).attr("page")) < 6; }) 
.sort(function(a,b) { return parseInt($(a).attr("page")) - parseInt($(b).attr("page")); }) 
.last(); 

拆毁了

  • 抓斗所有div的 立即在你的包装 有一个page属性。

  • 过滤器以仅包括是 小于6

  • 排序 这些元素的那些元素。 (如果你知道你的div被排序,可以跳过这个)。

  • 选择找到的最后一个元素,从而选择符合条件的元素。