cómo obtener la opción de selección basada en el valor

¿Cómo obtendría una opción de selección basada en un valor de esa opción?

por ejemplo:

<select>
  <option>option1</option>
  <option>option2</option>
  <option>option3</option>
</select>

Quiero encontrar la opción 2 según el valor.

var temp = "option2"; 
$(select).get(temp);

así que estoy usando get () como ejemplo de lo que quiero hacer. Sé que no hay un get para eso, pero quiero que devuelva la opción 2 como un objeto jquery.

preguntado el 27 de julio de 12 a las 21:07

¿Qué quiere decir "obtener una opción de selección"? ¿Quieres seleccionarlo? -

3 Respuestas

Quiere que el :contains selector.

$('option:contains("option2")', 'select')

Respondido 27 Jul 12, 21:07

¿Cómo usaría contiene con la variable temp? Capítuloj

@Chapsterj: $('option:contains("' + temp + '")', 'select') :-)- Cohete Hazmat

Editar por buen punto hecho por @Rocket::

Prueba esto si usas valores:

var val;

$( 'select' ).change(function(){
  val = $( 'option:selected', this ).val();
});

Prueba esto si usas el texto interno:

var text;

$( 'select' ).change(function(){
  text = $( 'option:selected', this ).text();
});

Prueba esto si tomas el elemento:

var elem;

$( 'select' ).change(function(){
  elem = $( 'option:selected', this );
});

Respondido 27 Jul 12, 21:07

¿Por qué no estás usando this dentro de change? - Cohete Hazmat

yo se que this es. Quiero decir, deberías estar usando $('option:selected', this) en cambio, para que solo obtenga las opciones de esa selección, y no todas (si hubiera más). PD $(this).val() funciona bien, no es necesario obtener el val() de la opción - Cohete Hazmat

No estaba asumiendo que había múltiples selecciones en la página. Solo trabajo con lo que tengo. $('option:selected', this) también funciona y es probablemente un mejor enfoque genérico. Actualizaré mi respuesta. :) - Mateo Blancarte

Sí, solo trato de ser más genérico, por si acaso. Solucionarlo ahora, para evitar errores más tarde :-) - Cohete Hazmat

Prueba esto: http://jsfiddle.net/WEWcc/ or como Rocket mencionado sin atributo de valor, intente esto: http://jsfiddle.net/cbyTf/

Podría escribir una función de filtro personalizada. :)

código

var temp = "option2";
$(document).ready(function() {

        var filter = temp;
        $('option').each(function() {
            if ($(this).val() == filter) {
                alert($(this).val());
            } else {

            }
            $('select').val(filter);
        })

})​

sin atributo de valor

var temp = "option2";
$(document).ready(function() {

        var filter = temp;
        $('option').each(function() {
            if ($(this).html() == filter) {
                alert($(this).html());
            } else {

            }

        })
   $('select').val(filter);
})​

Respondido 27 Jul 12, 21:07

hermano votante negativo :) por qué estás enojado o no te gusta esto; importa comentar! - Tats_innit

No voté en contra, pero el OP quiere que se devuelva la opción como un elemento jQuery. Además, ¿por qué estás configurando $('select').val en cada iteración del bucle? - Cohete Hazmat

+1 @Rocket Gracias por comentar hombre por tu comentario - podría hacer esto: jsfiddle.net/CvW5C/2 puedes hacerme +1 lol si quieres y perseguiré a nuestro votante negativo - Tats_innit

@Tats_innit: En tu violín acabas de vincular, $('select').val(filter) tampoco devuelve la opción, devuelve el elemento de selección completo. Hacer console.log($('select').val(filter)); para ver. - ¡no

@Tats_innit: Como nota al margen, el .each cuando se compara con el :contains el código se ejecuta progresivamente más lento ya que hay más de 3 opciones en la selección. Ver violín para la prueba de rendimiento: jsfiddle.net/FranWahl/ZAUR8/1 En 3 opciones la velocidad es casi la misma pero agrega 4,5 o 6 y empeora en el each. - ¡no

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.