2008-10-27 17 views
14

Si tenía la siguiente selección, y no sabía el valor que debía usar para seleccionar un elemento por adelantado como en este question o el índice del artículo que quería seleccionado, ¿cómo podría seleccionar una de las opciones con jQuery si lo hiciera? saber el valor del texto como la Opción C?¿Cómo selecciono un elemento por su valor de texto en un menú desplegable usando jQuery?

<select id='list'> 
<option value='45'>Option A</option> 
<option value='23'>Option B</option> 
<option value='17'>Option C</option> 
</select> 
+0

heh - i/thought/esto me resultó familiar! – nickf

Respuesta

14
var option; 
$('#list option').each(function() { 
    if($(this).text() == 'Option C') { 
     option = this; 
     return false; 
    } 
}); 
+1

Esta es una pregunta de principiante, estoy seguro, pero ¿qué opción de configuración = this; hacer en el código anterior? –

+1

@Carvell, 'option' se crea una instancia en la línea 1, en el ámbito externo, pero su valor es' undefined'. Al configurar 'option' en la línea 4,' option' en el ámbito externo es ahora el elemento DOM cuyo valor de texto es ''Option C''. Después del bucle '.each', en el ámbito externo,' option' se puede usar para referirse a ese elemento en particular. – eyelidlessness

+0

Ah bien. Eso tiene sentido. Estaba pensando que se suponía que estaba haciendo algo en cada función que me faltaba. Ajuste para el uso del alcance externo Entiendo :) Gracias. –

14

Esto debería hacer el truco:

// option text to search for 
var optText = "Option B"; 
// find option value that corresponds 
var optVal = $("#list option:contains('"+optText+"')").attr('value'); 
// select the option value 
$("#list").val(optVal) 

Como eyelidlessness señala, esto va a comportarse de forma impredecible cuando el texto que se busca se puede encontrar en más de una opción.

+1

El problema con eso es que también coincidiría con una opción con el texto "No Opción B" u "Opción B12" (obviamente fuera del alcance del ejemplo, pero el ejemplo es obviamente artificial). – eyelidlessness

+3

Puede usar la opción [text = "optText"] en lugar de contener si desea una coincidencia exacta en lugar de "somewhere in string". –

+0

@Scott Tengo un diablo de vez en cuando para hacer que esto funcione desde la actualización a jQuery 1.6.1 (y 1.6.2). Vea mi comentario en la respuesta de Pavel a continuación. –

4
function SelectItemInDropDownList(itemToFind){  
     var option; 
     $('#list option').each(function(){ 
      if($(this).text() == itemToFind) { 
       option = this; 
       option.selected = true; 
       return false;  
       } 
      }); } 

Solo modifiqué el código anterior porque solo localizaba la opción en la lista de selección, algunos pueden querer una demostración literal.

9
$("#list option").each(function() { 
    this.selected = $(this).text() == "Option C"; 
}); 
+0

He estado luchando con esto toda la tarde. Tenía un código que funcionaba antes de jQuery 1.6.1, p. $ (this) .find ('option [text = "sometext"]). val(); donde $ (this) es un elemento seleccionado, pero por alguna razón, ese código simplemente estaba volviendo indefinido. Utilicé su respuesta @Pavel, que es agradable y conciso en mi opinión, y conseguí que mi código funcionara nuevamente. ¡Gracias! Todavía me gustaría saber por qué el código viejo dejó de funcionar ...? –

Cuestiones relacionadas