2010-02-24 10 views
6

En jQuery 1.3.2, las siguientes obras:El establecimiento de un selecto por el sello a través de jQuery en 1.4

<select id="c"> 
    <option value="325">Red</option> 
    <option value="833">Purple</option> 
</select> 

$('#c').val('Red'); 

y cambia la selección para la opción con el rojo como su etiqueta. En jQuery 1.4 esto falla. ¿Cómo puedo obtener el mismo resultado en 1.4? ¿Esto fue un error en la versión 1.3?

Respuesta

10

Usted tendría que hacerlo de esta manera:

$('option:contains("Red")', '#c')[0].selected = true 

EDITAR

@Tomalak

Si las etiquetas enviaban mutuamente exclusivey que había necesita reescribir el selector:

$.fn.labselect = function(str) { 
    $('option', this).filter(function() { 
     return $(this).text() == str; 
    })[0].selected = true; 

    return this; 
}; 

// Use it like this 
$('#c').labselect('Red'); 
+0

¿Qué pasa con ''? – Tomalak

+0

+1 ahora. No veo una razón para limitarlo a los elementos '

+0

Mi pregunta no era lo suficientemente específica, pero usted contestó de todos modos, debo seleccionarla a través de la etiqueta, por lo que la función personalizada es la mejor opción. – Stomped

-1

probar este código:

$('#c').val("325"); 
2
$('#c').val('Red'); 

no deberían tener (en mi humilde opinión) trabajado en jQuery 1.3 porque "rojo" no es el valor. "325" es. ¿Qué hace esto:

$('#c').val("325"); 
+0

Funciona en 1.3.2, ¿por qué? – aefxx

+0

Oh, sé que lo que pongas lo hará funcionar; pero no tengo acceso, en este caso, al valor, tengo que configurarlo por la etiqueta. Mi solución a corto plazo fue retroceder a jQuery 1.3.2 – Stomped

1
$('#c').val('325'); 

o

// earlier - define a text-equals selector 
jQuery.extend(jQuery.expr[":"], { 
    "text-equals": function (a, i, m) { 
    return (a.textContent||a.innerText||jQuery(a).text()||'')==m[3]; 
    } 
}); 

// later - use it 
$red = $('#c option:text-equals(Red)'); 
$('#c').val($red.val()); 

El selector personalizado es una posibilidad. También podría hacer exactamente lo mismo en una devolución de llamada filter(), por ejemplo.

Cuestiones relacionadas