Percebi que o Chrome, ao que parece, não permite que eu me esconda <option>
em um <select>
. O Firefox vai.
Preciso ocultar os <option>
s que correspondem aos critérios de pesquisa. Nas ferramentas da web do Chrome, posso ver que elas estão sendo definidas corretamente display: none;
pelo meu JavaScript, mas uma vez que o <select>
menu é clicado, elas são exibidas.
Como posso fazer com que esses <option>
s que correspondem aos meus critérios de pesquisa NÃO sejam exibidos quando o menu for clicado? Obrigado!
javascript
jquery
css
dom
Jesse Atkinson
fonte
fonte
Respostas:
Você deve implementar dois métodos de ocultação.
display: none
funciona para FF, mas não para Chrome ou IE. Portanto, o segundo método é envolver o<option>
em a<span>
comdisplay: none
. O FF não fará isso (HTML tecnicamente inválido, de acordo com as especificações), mas o Chrome e o IE farão e ocultarão a opção.EDIT: Ah sim, já implementei isso no jQuery:
EDIT 2: Veja como você usaria esta função:
EDIT 3: Adicionada verificação extra sugerida por @ user1521986
fonte
<select>
(usando jQuery.val()
) retornaránull
. Acabei de testar isso no Chrome 29, portanto, os Googlers, cuidado!Para HTML5, você pode usar o atributo 'oculto'.
É não suportado pelo IE <11. Mas se você só precisa de esconder alguns elementos, talvez seria melhor apenas para definir o atributo oculto em combinação com deficientes em comparação a adição / remoção de elementos ou não fazer semanticamente construções corretas.
Referência .
fonte
disabled
que os navegadores que não suportam o atributo global HTML5hidden
tenham alguma indicação visual para o usuário.<option hidden disabled>
, portanto, oculta em todos os bons navegadores e desativa nos outros.Eu sugeriria que você não use as soluções que usam um
<span>
invólucro porque não é um HTML válido, o que pode causar problemas no futuro. Acho que a solução preferida é realmente remover todas as opções que você deseja ocultar e restaurá-las conforme necessário. Usando jQuery, você só precisará dessas 3 funções:A primeira função salvará o conteúdo original da seleção . Por segurança, convém chamar essa função ao carregar a página.
A próxima função chama a função acima para garantir que o conteúdo original foi salvo e, em seguida, simplesmente remove as opções do DOM.
A última função pode ser usada sempre que você quiser "redefinir" para todas as opções originais.
Observe que todas essas funções esperam que você esteja passando elementos jQuery. Por exemplo:
Aqui está um exemplo prático : http://jsfiddle.net/9CYjy/23/
fonte
var value=$select.val(); $select.html(ogHTML); $select.val(value);
para manter o valor selecionado selecionado mesmo após a restauração.A resposta de Ryan P deve ser alterada para:
Caso contrário, ele fica embrulhado em muitas tags
fonte
<select>
deve conter apenas<option>
ou<optgroup>
ou elementos de suporte a script. Portanto, você deve evitar o uso de<span>
wrappers inválidos .A função toggleOption não é perfeita e introduziu bugs desagradáveis em meu aplicativo. jQuery vai se confundir com .val () e .arraySerialize () Tente selecionar as opções 4 e 5 para ver o que quero dizer:
fonte
Selecionar entradas são complicadas dessa forma. Que tal desativá-lo, isso funcionará em todos os navegadores:
Isso desativará todos os outros
<option>
elementos, mas você pode selecionar qualquer um que desejar.Aqui está uma demonstração: http://jsfiddle.net/jYWrH/
Nota: Se você deseja remover a propriedade disabled de um elemento, você pode usar
.removeProp('disabled')
.Atualizar
Você pode salvar os
<option>
elementos que deseja ocultar no elemento de seleção oculto:Você pode então adicionar os
<option>
elementos de volta ao elemento de seleção original:Nestes dois exemplos, espera-se que o elemento select visível tenha o id de
visible
e o elemento select oculto tenha o idhidden
.Aqui está uma demonstração: http://jsfiddle.net/jYWrH/1/
Observe que
.on()
é novo no jQuery 1.7 e o uso para esta resposta é o mesmo que.bind()
: http://api.jquery.com/onfonte
Resposta simples: você não pode. Os elementos do formulário têm recursos de estilo muito limitados.
A melhor alternativa seria definir
disabled=true
a opção (e talvez uma cor cinza, já que apenas o IE faz isso automaticamente), e isso tornará a opção impossível de clicar.Como alternativa, se você puder, remova completamente o
option
elemento.fonte
fonte
Como já está usando JS, você pode criar um elemento SELECT oculto na página e, para cada item que está tentando ocultar nessa lista, mova-o para a lista oculta. Dessa forma, eles podem ser facilmente restaurados.
Não sei como fazer isso em CSS puro ... Eu teria pensado que o truque display: none teria funcionado.
fonte
!!! AVISO !!!
Substitua o segundo "IF" por "WHILE" ou não funciona!
fonte
Você deve removê-los do
<select>
usando JavaScript. Essa é a única maneira garantida de fazê-los ir embora.fonte
$('options').remove();
este parece funcionar para mim no cromo
fonte
Atrasado para o jogo, mas a maioria parece bastante complicada.
Veja como eu fiz:
marcação de select-1:
marcação de select-2:
fonte