2013-02-08 9 views
8

ho le seguenti div:I valori più alti e più bassi di un determinato attributo in jQuery o Javascript

<div id="2" class="maindiv">test</div> 
<div id="5" class="maindiv">test</div> 
<div id="3" class="maindiv">test</div> 
<div id="1" class="maindiv">test</div> 
<div class="maindiv">test</div>  
<div id="4" class="maindiv">test</div>  

Come ottenere il più alto id (5) e l'ID più basso (1) in jQuery o Javascript ?

+0

'document.getElementById();'? – David

+0

Quale attributo nel tuo caso? –

+0

Hm, non penso che quegli id ​​ci siano nemmeno validi. In entrambi i casi: http://api.jquery.com/each/ – Mahn

risposta

2
function minMaxId(selector) { 
    var min=null, max=null; 
    $(selector).each(function() { 
    var id = parseInt(this.id, 10); 
    if ((min===null) || (id < min)) { min = id; } 
    if ((max===null) || (id > max)) { max = id; } 
    }); 
    return {min:min, max:max}; 
} 

minMaxId('div'); // => {min:1, max:5} 

http://jsfiddle.net/qQvVQ/

1

Creare una variabile globale e confrontarla con ciascun elemento utilizzando Math.max all'interno di un ciclo.

var maxval = Number.MIN_VALUE, 
    minval = Number.MAX_VALUE; 

$('div').each(function() { 
    var num = parseInt(this.id, 10) || 0; // always use a radix 
    maxval = Math.max(num, maxval); 
    minval = Math.min(num, minval); 
}); 

console.log('max=' + maxval); 
console.log('min=' + minval); 

http://jsfiddle.net/mblase75/gCADe/

2
var min = Number.MAX_VALUE, max = Number.MIN_VALUE; 
$(".maindiv").each(function() { 
    var id = parseInt(this.id, 10); 
    if (id > max) { 
     max = id; 
    } 
    if (id < min) { 
     min = id; 
    } 
}); 
20

In primo luogo è necessario creare un array contenente tutti i valori id, quindi utilizzare Math per ottenere la più alta/bassa:

var ids = $(".maindiv[id]").map(function() { 
    return parseInt(this.id, 10); 
}).get(); 

var highest = Math.max.apply(Math, ids); 
var lowest = Math.min.apply(Math, ids); 

Example fiddle

Nota loÈ richiesto il selettore di attributo, altrimenti viene assunto 0 per il valore mancante.

+0

12 secondi più lento di me, ma con un esempio, quindi +1! – lonesomeday

+0

+1 per Math.max.apply – Adil

+0

Stavo facendo la mia risposta, ma la tua è eccellente! –

1

È necessario utilizzare i dati anziché l'id per questo.

<div data-value="2" class="maindiv">test</div> 
<div data-value="5" class="maindiv">test</div> 
<div data-value="3" class="maindiv">test</div> 
etc. 

Modifica: ho accorciato la mia risposta in favore della risposta accettata di Rory McCrossan sopra riportata.

+0

perché? id è comunemente usato come identificatore univoco –

+0

L'id del pozzetto può essere utilizzato, ma i dati sono più appropriati. Come hai detto nella tua domanda, questi sono valori. Gli ID devono essere utilizzati come identificatori e non come valori. –

+0

@MichaelSamuel perché un ID non deve memorizzare i dati ma gli attributi data- * lo sono. Quindi, usare l'attributo dati è una scelta migliore. – Licson

1
var valArray = []; 
$('.maindiv').each(function(){ 
    valArray.push(parseInt($(this).attr('id'), 10)); 
}) 
valArray.sort(function(a, b) { return a - b }) 

valArrayp[0] // lowest 
valArrayp[valArrayp.length - 1] // highest` 

non ho ancora testato, dovrebbe funzionare anche se

1

È possibile utilizzare la funzione di ordinamento per farlo.

function arrayify(obj){ 
    return [].slice.call(null,obj); 
} 
var all = arrayify(document.querySelectorAll('div[id]')); 
var max = all.sort().pop(); 
var min = all.sort().reverse().pop(); 

Questo è il modo più semplice che usare jQuery

+0

questo è anche un buon approccio..grazie :) –

+0

Ho aggiornato perché mi sono perso qualcosa. Controlla il nuovo codice. – Licson

Problemi correlati