Me di cuenta de que Chrome, al parecer, no me permitirá esconderme <option>
en un <select>
. Firefox lo hará.
Necesito ocultar los mensajes de correo <option>
electrónico que coinciden con un criterio de búsqueda. En las herramientas web de Chrome puedo ver que display: none;
mi JavaScript las está configurando correctamente , pero una vez que <select>
se hace clic en el menú, se muestran.
¿Cómo puedo hacer que estos <option>
mensajes de correo electrónico que coinciden con mis criterios de búsqueda NO se muestren cuando se hace clic en el menú? ¡Gracias!
javascript
jquery
css
dom
Jesse Atkinson
fuente
fuente
Respuestas:
Tienes que implementar dos métodos para esconderte.
display: none
funciona para FF, pero no para Chrome o IE. Entonces, el segundo método es envolver el<option>
en un<span>
condisplay: none
. FF no lo hará (HTML técnicamente no válido, según la especificación) pero Chrome e IE lo harán y ocultará la opción.EDITAR: Oh sí, ya implementé esto en jQuery:
EDITAR 2: Así es como usaría esta función:
EDITAR 3: Se agregó una verificación adicional sugerida por @ user1521986
fuente
<select>
(usando jQuery's.val()
) regresaránull
. Acabo de probar esto en Chrome 29, así que ¡cuidado con los empleados de Google!Para HTML5, puede utilizar el atributo 'oculto'.
Se no soportado por el IE <11. Pero si sólo se necesita para ocultar algunos elementos, tal vez sería mejor simplemente establecer el atributo oculto en combinación con personas con discapacidad en comparación con la adición / eliminación de elementos o no hacer construcciones semánticamente correctas.
Referencia .
fuente
disabled
que aquellos navegadores que no admiten el atributo global HTML5hidden
tengan alguna indicación visual para el usuario.<option hidden disabled>
, por lo que se oculta en todos los buenos navegadores y lo desactiva en los demás.Sugeriría que no use las soluciones que usan un
<span>
contenedor porque no es HTML válido, lo que podría causar problemas en el futuro. Creo que la solución preferida es eliminar las opciones que desee ocultar y restaurarlas según sea necesario. Con jQuery, solo necesitará estas 3 funciones:La primera función guardará el contenido original de la selección . Para estar seguro, es posible que desee llamar a esta función cuando cargue la página.
Esta siguiente función llama a la función anterior para asegurarse de que el contenido original se haya guardado y luego simplemente elimina las opciones del DOM.
La última función se puede utilizar siempre que desee "restablecer" todas las opciones originales.
Tenga en cuenta que todas estas funciones esperan que esté pasando elementos de jQuery. Por ejemplo:
Aquí hay un ejemplo de trabajo: http://jsfiddle.net/9CYjy/23/
fuente
var value=$select.val(); $select.html(ogHTML); $select.val(value);
para mantener el valor seleccionado seleccionado incluso después de la restauración.La respuesta de Ryan P debe cambiarse a:
De lo contrario, se envuelve en demasiadas etiquetas.
fuente
<select>
solo debe contener<option>
o<optgroup>
elementos de soporte de script. Por lo tanto, debe evitar el uso de<span>
contenedores no válidos .La función toggleOption no es perfecta e introdujo errores desagradables en mi aplicación. jQuery se confundirá con .val () y .arraySerialize () Intente seleccionar las opciones 4 y 5 para ver lo que quiero decir:
fuente
Las entradas seleccionadas son complicadas de esta manera. ¿Qué hay de deshabilitarlo en su lugar? Esto funcionará en todos los navegadores:
Esto desactivará todos los demás
<option>
elementos, pero puede seleccionar el que desee.Aquí hay una demostración: http://jsfiddle.net/jYWrH/
Nota: Si desea eliminar la propiedad deshabilitada de un elemento, puede usar
.removeProp('disabled')
.Actualizar
Puede guardar los
<option>
elementos que desea ocultar en el elemento de selección oculto:Luego, puede volver a agregar los
<option>
elementos al elemento seleccionado original:En estos dos ejemplos, se espera que el elemento de selección visible tenga la identificación de
visible
y el elemento de selección oculto tenga la identificación dehidden
.Aquí hay una demostración: http://jsfiddle.net/jYWrH/1/
Tenga en cuenta que
.on()
es nuevo en jQuery 1.7 y el uso de esta respuesta es el mismo que.bind()
: http://api.jquery.com/onfuente
Respuesta simple: no puedes. Los elementos de formulario tienen capacidades de estilo muy limitadas.
La mejor alternativa sería establecer
disabled=true
la opción (y tal vez un color gris, ya que solo IE lo hace automáticamente), y esto hará que no se pueda hacer clic en la opción.Alternativamente, si puede, elimine completamente el
option
elemento.fuente
fuente
Como ya está utilizando JS, puede crear un elemento SELECT oculto en la página y, para cada elemento que intente ocultar en esa lista, muévalo a la lista oculta. De esta manera, se pueden restaurar fácilmente.
No sé cómo hacerlo en CSS puro ... Hubiera pensado que la pantalla: ningún truco habría funcionado.
fuente
!!! ADVERTENCIA !!!
Reemplace el segundo "SI" por "MIENTRAS" o no funciona.
fuente
Debe eliminarlos del
<select>
uso de JavaScript. Esa es la única forma garantizada de hacer que desaparezcan.fuente
$('options').remove();
este parece funcionar para mí en Chrome
fuente
Tarde para el juego, pero la mayoría de estos parecen bastante complicados.
Así es como lo hice:
marcado de select-1:
marcado de select-2:
fuente