var elements = (document.getElementsByTagName('li'));
var vals = [];
for(var i=0;typeof(elements[i])!='undefined';vals.push(elements[i++].getAttribute('value')));
keine Bibliothek 3 Zeilen Code …
episch schneller
var myVals = [];
$('li','ul').each(function(){
myVals.push($(this).attr('value'));
});
und die Kartenfunktion von jquery verwenden …
var myVals = [];
$('li','ul').map(function(){
myVals.push($(this).attr('value'));
});
map würde nicht wirklich Sinn machen … da Sie nur Werte und keine DOM-Elemente extrahieren
– Samccone
14. August 2011 um 4:51 Uhr
@samccone Kann aber Werte zurückgeben: p
– Benutzer166390
14. August 2011 um 5:18 Uhr
ha ok du gewinnst.. wenn wir 14 zeichen sparen wollen können wir das so machen 🙂
– Samccone
14. August 2011 um 5:22 Uhr
absolut es ist schneller! Und eine tolle Lösung. Ich würde die meiste Zeit auch reines Javascript verwenden. Die Frage stellte sich jedoch nach einer jQuery-Lösung.
– natedavisolds
14. August 2011 um 13:44 Uhr
+1, es ist verrückt, wie niedriger Code schneller sein kann! Eleganz hat ihren Preis.
– Nikolaus Buduroi
14. August 2011 um 15:37 Uhr
natedavis
Ich denke, dass die Karte gut funktioniert … nur nicht in der Kette.
var vals = $.map($("li[value]"), function(li) {
return $(li).attr("value");
});
@samccone interessant, dass “keine Bibliothek” für eine Frage bevorzugt wird, die speziell nach einer Lösung “mit jquery” fragt.
– natedavisolds
18. Februar 2014 um 17:39 Uhr
Dies ist auch das “eleganteste”, wie die Frage stellt. Geschwindigkeit ist für einen so kleinen Lauf irrelevant, aber trotzdem schön anzusehen.
– Ael
22. August 2017 um 23:18 Uhr
var outVal = [];
$('ul li').each(function(idx, el){
outVal.push($(this).attr('value'));
});
Apropos eleganter Code, wir können eine bessere Lösung mit Underscore in Kombination mit jQuery erhalten: