2013-02-08 14 views
8

Ich habe folgende divs:Holen Sie sich die höchsten und niedrigsten Werte eines bestimmten Attribut in jQuery oder 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>  

Wie die höchste ID erhalten (5) und die niedrigste id (1) in jQuery oder Javascript ?

+0

'document.getElementById();'? – David

+0

Welches Attribut in Ihrem Fall? –

+0

Hm, ich glaube nicht, dass diese IDs sogar gültig sind. So oder so: http://api.jquery.com/each/ – Mahn

Antwort

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

Erstellen Sie eine globale Variable und vergleichen Sie sie mit jedem Element unter Verwendung von in einer Schleife.

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

Zuerst müssen Sie ein Array erstellen, die alle id Werte enthält, dann Math verwenden, um die höchsten/niedrigsten zu bekommen:

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

Beachten Sie die [id] Attributselektor ist erforderlich, andernfalls wird für den fehlenden Wert 0 angenommen.

+0

12 Sekunden langsamer als ich, aber mit einem Beispiel, also +1! – lonesomeday

+0

+1 für Math.max.apply – Adil

+0

Ich tat meine Antwort, aber Ihre ist ausgezeichnet! –

1

Sie sollten dafür Daten anstelle von ID verwenden.

Edit: Ich verkürzte meine Antwort zugunsten von Rory McCrossan angenommene Antwort oben.

+0

warum? ID wird häufig als eindeutiger Bezeichner verwendet –

+0

Nun ID kann verwendet werden, aber Daten sind besser geeignet. Wie Sie in Ihrer Frage erwähnt haben, sind dies Werte. IDs sollen als Bezeichner und nicht als Werte verwendet werden. –

+0

@MichaelSamuel, weil eine ID keine Daten speichern soll, sondern Daten * Attribute sind. Daher ist die Verwendung des Datenattributs eine bessere Wahl. – 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` 

nicht getestet, sollte jedoch funktionieren

1

Sie die Sortierfunktion, es zu tun verwenden können. Diese

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(); 

ist viel einfacher, dass die Verwendung von jQuery

+0

das ist auch ein netter Ansatz..danke :) –

+0

Ich habe aktualisiert, weil ich etwas verpasst habe. Überprüfen Sie den neuen Code. – Licson

Verwandte Themen