2011-01-06 7 views
12

Tengo un montón de elementos como:Recorrer todos los elementos con 'bla' clase y encontrar el valor id más alto

<div id="car-123" class="blah">..</div> 

Quiero bucle a través de todos ellos y conseguir la mayor ID es decir, 123

cómo hacer esto?

¿Es correcto a continuación y la mejor manera?

$(".blah").each(function() { 

    var id = $(this).attr('id').split('-')[0]; 

    if(id > newid) 
     newid = id; 

}); 
+0

¿Están escritos secuencialmente en la página por su servidor? Solo agarrar el último funcionaría en ese caso. –

+1

Creo que te refieres a '$ (this) ... [1]' not '[0]' –

+0

Además del comentario de Gabi, debes ajustar '$ (this) ...;' como 'parseInt ($ (esto) ..., 10); 'para hacer comparación de números en lugar de comparación de cadenas (porque" 12 ">" 100 "). De lo contrario, esto parece bastante sencillo. –

Respuesta

1

que desea utilizar parseInt operadores por lo numéricos se aplican

var id = parseInt($(this).attr('id').split('-')[1]); 
+0

Eso es casi lo mismo que yo, pero no olvide el parámetro radix en 'parseInt':' parseInt (str, 10); ' – Harmen

+0

Ah, no entendí su respuesta. –

0

creo que es necesario el segundo valor de la ID Splitted, y es posible que desee convertir la cadena en un entero, de esta manera:

var newid = 0; 

$(".blah").each(function() { 

    var id = parseInt(this.id.split('-')[1], 10); 

    if(id > newid) 
    newid = id; 

}); 
10

yo iría a esto, el uso de .map, .get y .sort:

$('.blah').map(function(){ 
    return parseInt(this.id.split('-')[1], 10); 
}).get().sort(function(a, b) { 
    return b - a; 
})[0]; 
+0

+1 ¡Bien hecho! – karim79

+0

Eso es interesante ... una cosa que me gusta es que no introduce una variable local en el alcance. –

+1

Lo único que no me gusta es usar 'parseInt',' get', 'map',' sort', donde puedes usar 'each',' parseInt' – RobertPitt

17

que haría:

var max = 0; 
$(".blah").each(function(){ 
    num = parseInt(this.id.split("-")[1],10); 
    if(num > max) 
    { 
     max = num; 
    } 
}); 

La mayoría de la gente haría de esta manera.

+1

sí, mucho más fácil de leer. – EdH

+1

en lugar del '[1]' podría hacer 'num = parseInt (this.id.split ('-'). Pop(), 10);'. También podría ser una buena idea declarar 'var num;' al mismo tiempo que 'var max = 0' – martincarlin87

Cuestiones relacionadas