2011-10-05 9 views
5

Quale sarebbe il modo corretto di estendere il selettore di attributi jQuery in modo che supporti Minore di e maggiore di?Estensione selettore di attributi con minore di e maggiore di in jQuery

Ho alcuni elementi che contengono un attributo personalizzato SequenceNumber che contiene un intero. (Prima che qualcuno parta non posso usare la proprietà data (credo?) Perché questo html è determinato in fase di esecuzione e generato serveride)

In entrambi i casi. Quello che sto cercando di realizzare è la possibilità di selezionare una serie di elementi che contengono un SequenceNumber tra X e Y.

Quindi, in pratica qualcosa di simile

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

Ovviamente posso farlo andando

$("#divSequenceGrid ul").each(function (index, value) { 
    //Push into an array those that fit my criteria 
}); 

Ma mi chiedo se c'è un modo burro?

+0

in grado di filtrare forse servire le vostre esigenze? http://api.jquery.com/filter/ –

risposta

11

Utilizzando .filter()

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

Ecco una demo: http://jsfiddle.net/jFt9N/3/

+0

grazie, questo funziona bene – M98

2

È possibile utilizzare jQuery espressioni di selezione come questo

$.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

puoi anche implodere espressioni 'var parts = m [3] .split ('-'), n = parseInt ($ (e) .attr ('SequenceNumber'); return n> = parseInt (parts [0]) && n <= parseInt (parti [1]); ' – verybadbug

Problemi correlati