2012-04-10 33 views
1

Ich habe ein Menü. Bei gegebenem Wert möchte ich den Text zurückgeben. Zum Beispiel würde 0 "Null" zurückgeben, 1 würde "Eins" zurückgeben usw. Beachten Sie, dass es mir egal ist, welche Option momentan ausgewählt ist und ob ich das Menü automatisch auswählen möchte, sondern nur das Auswahlmenü verwenden möchte eine primitive Datenbank. Kann dies einfach mit JavaScript oder jQuery durchgeführt werden, ohne die einzelnen Optionen zu durchlaufen?Wählen Sie Optionstext basierend auf Wert

<select> 
<option value="0">zero</option> 
<option value="1">one</option> 
<option value="2">two</option> 
<option value="3">three</option> 
</select> 

Dank

+0

Verwenden Sie den "ausgewählt:" Selektor (http: // api. jquery.com/selected-selector/) – ckaufman

+0

http://jsfiddle.net/ckaufman/aDU5E/ – ckaufman

Antwort

5

Anstelle der Verwendung der select als Datenbank (erfordert eine teure Operation für einfache Lookups), erstellen Sie einen Datensatz von ihm einmal, dann verwenden Sie das ...

var vals = $('select option').map(function(i, el) { return el.text; }) 
          .toArray(); 
alert(vals[2]); // "two" 

Oder wenn die option Werte 0 basierte Indizes werden nicht sequentiell, dann ein Objekt verwenden ...

var vals = {}; 

$('select option').each(function(i, el) { vals[el.value] = el.text }); 

alert(vals[2]); // "two" 
+0

Ich plante auch einen ähnlichen Ansatz. Wenn die Daten zum ersten Mal benötigt werden, erstellen Sie die Variable. – user1032531

+0

+1. Obwohl ich nicht denke, 10 oder sogar 100 Optionen zu wiederholen, ist in unseren Tagen eine teure Operation. Es ist einfach nicht die Zeit wert. Habe ich recht? – gdoron

+0

@gdoron: Du hast Recht. Ich dachte eher, dass die DOM-Auswahl eine unnötig teure Methode zum Speichern und Abrufen von Werten ist. –

0

Verwenden Sie das Attribut-Selektor gleich:

var valToSearchFor = 0; 
    textFromOption = $('select option[value="' + valToSearchFor + '"]').text(); 

Dies wird iterieren immer noch jeden option auf das Vorhandensein des Wertes für die Sie schauen, um zu testen, aber es wird Mach 'hinter die Kulissen', damit du nicht musst.

Es gibt die Möglichkeit, querySelectorAll() verwenden (wenn auch mit mehr oder weniger der gleichen Schreibweise wie die oben jQuery):

var valToSearchFor = 0; 
    textFromOption = document.querySelectorAll('option[value="' + valToSearchFor + '"]').innerHTML; 

Dies erfordert natürlich, dass der Browser querySelectorAll() implementiert, und nicht alle tun (IE insbesondere).

Referenzen:

+0

In Ihrer Demo setzen Sie den Wert eines Elements auf '4' und versuchen dann, den Text eines Elements abzurufen, dessen Wert ist gleich "3". Was nicht existiert. Wenn Sie Ihre Demo ändern, um ein Element mit einem vorhandenen Wert zu finden, funktioniert es (http://jsfiddle.net/davidThomas/Mewa/2/). –

+0

... Ich bin ein Idiot. Vielen Dank. –

+1

Keine Sorgen, ich bin nur ein bisschen peinlich es dauerte so lange zu realisieren ... = D –

3
var value = '3'; 
alert($('select option[value=' + value + ']').text()); 

Live demo.

Auch sollten Sie die Wählen Sie eine ID und aktualisieren Sie die Wähler geben, weil, wenn Sie mehrere Drop-Down-Listen haben die Wähler nicht funktionieren:

alert($('#id_of_the_select option[value=' + value + ']').text()); 
+0

Nein, es würde genauso gut funktionieren – FreeCandies

+0

Ich weiß nicht, ob das OP interessiert ist, welcher Wert derzeit ausgewählt ist. Er möchte dem Text einen Wert geben. Oder vielleicht habe ich die Frage falsch verstanden. –

+0

Dies gibt nicht den Text nach der Auswahl einer anderen Option – ckaufman

0

Verwenden Sie die selected: Selector. Beispiel direkt auf der Seite angegeben.

http://api.jquery.com/selected-selector/

$("select").change(function() { 
     var str = ""; 
     $("select option:selected").each(function() { 
      str += $(this).text() + " "; 
      }); 
     $("div").text(str); 
    }) 
    .trigger('change'); 

Ersetzen Sie die "div" mit dem Fall, dass Sie

http://jsfiddle.net/ckaufman/aDU5E/1/

+0

Ich glaube, dies wird verwendet, um nur die ausgewählte Option zu erhalten. – user1032531

+0

Das Beispiel wurde mit dem Optionsmenü aktualisiert, sodass Sie es in Aktion sehen können. http://jsfiddle.net/ckaufman/aDU5E/1/ – ckaufman

1

Wie sonst würden Sie für einen Wert scannen auszulösen versuchen, ohne über jede Option laufen? Es gibt keine magische Eigenschaft, die es für dich tut.

Allerdings können Sie diesen Code verwenden:

(function() { 
    var sels = document.getElementsByTagName('select'), l = sels.length, i, 
     opts, m, j, o; 
    for(i=0; i<l; i++) { 
     o = {}; 
     opts = sels[i].options; 
     m = opts.length; 
     for(j=0; j<m; j++) o[opts[j].value] = opts[j].text; 
     sels[i].map = o; 
    } 
})(); 

setzen, die kurz vor </body>, und jetzt können Sie die Karte von jedem <select> auf Ihrer Seite zu finden:

var sel = document.getElementById('mySelect'); 
alert(sel['0']); 
+0

BTW, das ist Hunderte von Mal effizienter als jede jQuery-Lösung, nur damit Sie wissen;) –

+0

Ja, Wetten, es ist viel effizienter. Vermutlich behalten Sie eine jQuery-Lösung und ändern später alles nach dem Prototyping und der Verwendung in der Produktion. – user1032531

Verwandte Themen