2011-10-05 81 views
5

扩展jQuery属性选择器的正确方法是什么,以便它支持小于和大于?在jQuery中扩展属性选择器的小于&大于

我有一些元素包含一个自定义属性SequenceNumber持有一个整数。 (在任何人开始之前,我不能使用数据属性(我认为?),因为这个html是在运行时和生成服务器端确定的)

无论哪种方式。我在找实现的是选择一个数字,包含在X和Y的的SequenceNumber

所以基本上是这样的

$("#divSequenceGrid ul[SequenceNumber=>'1'][SequenceNumber<='10']").each(func); 

元素很显然,我可以去

能力做到这一点
$("#divSequenceGrid ul").each(function (index, value) { 
    //Push into an array those that fit my criteria 
}); 

但我想知道是否有黄油方式?

+0

可以过滤可能满足您的需求? http://api.jquery.com/filter/ –

回答

11

使用.filter()

$("#divSequenceGrid ul").filter(function(){ 
     return $(this).attr("sequenceNumber") >=1 && $(this).attr("sequenceNumber") <=10}).css("color", "red"); 

这里有一个演示: http://jsfiddle.net/jFt9N/3/

+0

谢谢你,这个工作很好 – M98

2

您可以使用jQuery选择表达这样

$.extend($.expr[':'], { 
    sMore: function(e, i, m) { return parseInt($(e).attr('SequenceNumber')) >= m[3]; }, 
    sLess: function(e, i, m) { return parseInt($(e).attr('SequenceNumber')) <= m[3]; } 
}); 

$(function() { 
    alert($('div:sMore(2):sLess(4)').length); 
}); 
+0

你也可以挤爆表达式 'var parts = m [3] .split(' - '),n = parseInt($(e) .attr('SequenceNumber'); return n> = parseInt(parts [0])&& n <= parseInt(parts [1]); – verybadbug