jQuery wählt Attribute in ein Array aus

Lesezeit: 2 Minuten

Was ist der eleganteste Weg, um dieses Array zu erhalten

[10, 20, 30, 40, 50]

aus dieser Liste

<ul>  
    <li value="10">Item One</li>
    <li value="20">Item Two</li>
    <li value="30">Item three</li>
    <li value="40">Item Four</li>
    <li value="50">Item Five</li>
</ul>

mit jQuery.

Benutzer-Avatar
Schinken

****bearbeiten****

ok der Handschuh wurde runtergeworfen…

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

Geben Sie hier die Bildbeschreibung ein


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'));
});

und beide sind gleich schnell..
http://jsperf.com/testing-stuff
Geben Sie hier die Bildbeschreibung ein

  • 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

Benutzer-Avatar
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:

_($('ul li').toArray()).map(function(e) { return e.value })

Und wo wir gerade dabei sind, warum nicht Javascript für CoffeeScript ausgeben:

_($('ul li').toArray()).map (e) -> e.value

😉

1251560cookie-checkjQuery wählt Attribute in ein Array aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy