2010-09-19 8 views
149

Ich muss überprüfen, ob eine <select> eine Option hat, deren Text einem bestimmten Wert entspricht.Wie wählt man eine Option über ihren Text?

Zum Beispiel, wenn es eine <option value="123">abc</option> gibt, würde ich nach "abc" suchen.

Gibt es einen Selektor, um dies zu tun?

Ich bin auf der Suche nach etwas ähnlich wie $('#select option[value="123"]');, aber für den Text.

+0

Hmm ... die 'has' in SLaks Antwort ist nützlich, aber der Punkt in Floyds Antwort ist auch gut ... Ich weiß nicht, was zu akzeptieren. – Hailwood

+0

auch, sind diese Fälle empfindlich? (Ich suche nach case-insensitivity und kann immer nur in niedrigere konvertieren – Hailwood

+1

Ich benutze die JavaScript-Kernfunktion .toLowerCase() und vergleichen, wenn Groß-/Kleinschreibung nicht erforderlich ist.Auch zu akzeptieren als die Antwort, die am nützlichsten für Ihre Frage ist . :) –

Antwort

245

Dies könnte helfen:

$('#test').find('option[text="B"]').val(); 

Demo - http://jsfiddle.net/nmvf6/1/

Dies würde Ihnen die Möglichkeit, mit Text B und nicht diejenigen, die Text enthält, B enthält. Hope this

EDIT hilft:

Neuere Versionen von jQuery die oben nicht funktioniert. Wie unten durch Quandary kommentiert, ist das, was für jQuery funktioniert 1.9.1:

$('#test option').filter(function() { return $(this).html() == "B"; }).val(); 

Updated fiddle

+0

dies funktioniert nicht mit den neuesten Versionen von jquery (wenn Sie 'Wert =' von

+19

@KevinDeus: Warum der Downvote !? Die Antwort war für die Version von jQuery dann! –

+0

@Floyd Pink: Weil es nicht mehr funktioniert und nicht aktualisiert wurde. –

-1

Entweder Sie durchlaufen die Optionen, oder legen Sie den gleichen Text in ein anderes Attribut der Option und wählen Sie mit diesem.

109

Sie können die :contains() selector verwenden, um Elemente auszuwählen, die bestimmten Text enthalten.
Zum Beispiel:

$('#mySelect option:contains(abc)') 

Um zu überprüfen, ob ein bestimmtes <select> Element eine solche Option hat, verwenden Sie die .has() method:

if (mySelect.has('option:contains(abc)').length) 

alle <select> s zu finden, die eine solche Option enthalten, verwenden Sie die :has() selector:

$('select:has(option:contains(abc))') 
+2

': contains' ist jetzt nicht endgültig, oder? –

+2

@Floyd: Was? – SLaks

+0

Überprüfen Sie meine Antwort unter –

23

Keine der vorherigen Vorschläge für mich in jQuery 1.7.2 gearbeitet, weil ich versuche, die ausgewählte einstellen Index der Liste basierend auf dem Wert aus einem Textfeld, und einige Textwerte sind in mehreren Optionen enthalten. Ich beenden die Follow-up mit:

$('#mySelect option:contains(' + value + ')').each(function(){ 
    if ($(this).text() == value) { 
     $(this).attr('selected', 'selected'); 
     return false; 
    } 
    return true; 
}); 
+1

Ich denke, das ist die beste Antwort, weil es tatsächlich die richtigen Ergebnisse liefert. Aber ich kann nicht anders, als zu denken, '' contains '' überhaupt wegzulassen, kann die Dinge tatsächlich beschleunigen. – styfle

+0

Spot on, funktioniert super –

+0

Dies funktionierte für mich, aber in meinem Szenario konnte ich mehrere Male auf Bearbeiten auf einem Raster klicken, also musste das ausgewählte Attribut entfernen, wenn keine Übereinstimmung vorhanden war, ansonsten würde die erste Option für nachfolgende Bearbeitungen übrig bleiben. else { $ (this) .attr ('ausgewählt', ''); Rückgabe false; } – msr

1

Dies wird in jQuery 1.6 (beachten Sie Doppelpunkt vor der öffnenden Klammer) arbeiten, aber nicht auf den neueren Versionen (1.10 zu der Zeit).

$('#mySelect option:[text=abc]") 
+5

Interessant, aber leider scheint es nicht zu funktionieren (jQuery 1.10.2). – WynandB

+0

Danke @WynandB, ich habe meine Antwort aktualisiert. –

+0

Sie möchten etwas wie '$ (" # mySelect Option ") einfügen. Filter (function() {return this.text ==" abc ";});' wird mit den neuesten Versionen von jQuery funktionieren .. Oder wahrscheinlich eine andere Art, die Sie bevorzugen zu verwenden .. – Fr0zenFyr

-1

Dies funktioniert auch.

$ ('# test'). Find ("Option auswählen: enthält ('B')"). Filter (": selected");

+0

Dies wird auch die Option "ABC" greifen. – Teepeemm

4

Ich habe ein paar dieser Dinge ausprobiert, bis ich in Firefox und IE arbeiten konnte. Das ist, was mir eingefallen ist.

$("#my-Select").val($("#my-Select" + " option").filter(function() { return this.text == myText }).val()); 

eine andere Art und Weise in einem besser lesbaren fasion des Schreibens:

var valofText = $("#my-Select" + " option").filter(function() { 
    return this.text == myText 
}).val(); 
$(ElementID).val(valofText); 

Pseudocode:

$("#my-Select").val(getValOfText(myText)); 
+0

Sinnvoll mit den neuesten Versionen von jQuery – Fr0zenFyr

+0

Was ist der Sinn von '" # my-Select "+" option "'? Warum nicht nur "" # my-Select option "'? – Teepeemm

-1

Wie in this answer beschrieben, können Sie Ihre eigenen Wähler für hasText leicht erstellen. Auf diese Weise können Sie die Möglichkeit finden, mit $('#test').find('option:hastText("B")').val();

Hier ist die hasText Methode, die ich hinzugefügt:

if(! $.expr[':']['hasText']) { 
    $.expr[':']['hasText'] = function(node, index, props) { 
     var retVal = false; 
     // Verify single text child node with matching text 
     if(node.nodeType == 1 && node.childNodes.length == 1) { 
     var childNode = node.childNodes[0]; 
     retVal = childNode.nodeType == 3 && childNode.nodeValue === props[3]; 
     } 
     return retVal; 
    }; 
    } 
-2

Dies funktioniert für mich

var options = $(dropdown).find('option'); 
var targetOption = $(options).filter(
function() { return $(this).html() == value; }); 

console.log($(targetOption).val()); 

Vielen Dank für alle Beiträge.

11

Das ist für mich gearbeitet: $("#test").find("option:contains('abc')");

+2

Sie sollten eine Erklärung von * warum * es funktioniert auch hinzufügen. –

+0

Das hat für mich funktioniert. Vielen Dank. – max

+0

@HannesJohansson Oder er sollte zumindest erklären, wie es anders ist oder fügt etwas neues SLaks Antwort, die fast fünf Jahre älter ist. ;) – ruffin

2

Verwenden folgenden

$('#select option:contains(ABC)').val(); 
+0

Der von Ihnen bereitgestellte Code kann das Problem beheben. Bitte fügen Sie jedoch eine kurze Beschreibung hinzu, wie das Problem behoben wird. Willkommen zu Stack Overflow, empfohlenes Lesen [Antwort]. –

+3

wenn es einige Optionen gibt: ABC, ABCD, ABCDEF, dann? – hungndv

6

ich das gleiche Problem unter konfrontiert ist der Arbeitscode:

$("#test option").filter(function() { 
    return $(this).text() =='Ford'; 
}).prop("selected", true); 

Demo: http://jsfiddle.net/YRBrp/83/

1

Für jquery Version 1.10.2 unter der Arbeit ed für mich

var selectedText="YourMatchText"; 
    $('#YourDropdownId option').map(function() { 
     if ($(this).text() == selectedText) return this; 
     }).attr('selected', 'selected'); 
    }); 
7

Dies ist die beste Methode für die Auswahl von Text in Dropdown-Liste.

$("#dropdownid option:contains(your selected text)").attr('selected', true); 
+0

Wie bei ähnlichen Antworten finden Sie hier eine Option mit 'dies ist Ihr ausgewählter Text plus mehr'. – Teepeemm

-3

Für jQuery 3:

$("#myDiv select").val("text"); 
+0

Dies wird den gesamten Text aller Optionen erhalten. Sie müssen verarbeiten, was Sie sehen, wenn eine Option den Text OP will. – Teepeemm

Verwandte Themen