Texto oculto pode ser selecionado no IE apesar de style = 'display: none'

Isso parece ser um "recurso" específico do IE. Eu testei usando o IE8. Do utilizadorJohn H tem contribuindo confirmando no IE6 e IE7.

Eu tenho algum texto que é construído em minha página e desde o início da criação do elemento temstyle = "display: none;"

Eu não estou usando o jQuery para esconder o texto e o texto não está "aparecendo". Embora, para divulgação adicional, eu acesse o conteúdo do elemento usando o jQuery's.html() método.

No entanto, se o usuário selecionar textonas proximidades minhadisplay:none elemento e copia o que foi selecionado, o texto oculto é incluído. Como se estivesse exibindo normalmente.

A marcação é assim:

<code>...
<td align="left">
    Text they should see
    <div id="whateverButUnique" style="display:none;">Value I want hidden</div>
    Some other text
</td>
</code>

Aqui está umviolino onde eu posso reproduzir o problema usando o IE <9.

Enquanto isso não é uma preocupação séria para este aplicativo específico, ele me pegou de surpresa e eu me perguntei se isso é um 'recurso' ou se eu estava fazendo algo incorretamente.

A maioria dosoutras perguntas Eu vi sobredisplay:none tinha o conteúdo de seus pôsteres como visível. Mais uma vez, meu conteúdo é essencialmente invisívelaté selecionado, copiado e finalmente colado.

Posso impedir que os usuários do Internet Explorer encontrem esse conteúdo copiando / colando? Eu percebo que eles poderiam vê-lo no Developer Tools e visualizando a fonte.

Atualizar: graças aos comentários de outros usuários, eu também tentei aplicar o estilo devisibility:hidden ez-index=-1. Do utilizadorJohn H tentou muitas outras tentativas de esconder, mas o IE é tão tenaz ao permitir que esse recurso escorregue. Obrigado por todas as grandes ideias!

Atualizar: Obrigado por perguntarHeather Walters; os valores que eu preciso usar na página estão disponíveis apenas no lado do servidor, mas eu os usoapós o carregamento da página para gerar um link usando processamento extra de um programa externo via jQuery / AJAX. Então, eu construo a página com os valores ocultos, mas incluo e, em seguida, operei nesses valores ocultos para construir algo útil com eles.

Uma vez que eu terminei de usá-los para construir algo útil, agora eu percebo que posso eliminá-los por meio do jQuery e obter um desempenho extra. O código a seguir faria isso para todos que tem javascript habilitado:

<code>$("[id^=whateverButUnique]").html("");
</code>

Com potencialmente centenas de elementos na página, esse processamento extra não é ideal.

vegaEu não acreditoesta solução funcionaria para mim porque eu tenho que construir a página e meu conteúdo oculto no lado do servidor. Eles são todos construídos em um loop do lado do servidor com potencialmente centenas de outros elementos, então eu tenho a opção de construí-lo no lugar enquanto o servidor está colocando tudo em uma tabela (com elemento oculto incluído) ou percorrê-lo pela segunda vez (doloroso) e tente forçar os elementos a serem exibidos: nenhum em menos probabilidade de ser selecionado.

Oh Deus, porqueEu queria acreditar na sua solução. No IE8, o campo oculto não apareceu no bloco de notas; no entanto, consegui copiar a seção e colá-la no Microsoft Word. Já não estava oculto.

Outro fator no trabalho: esta página já é bastante javascript pesado, então eu estava esperando que eu pudesse encontrar uma solução que impediria o IE de ver os valores sem adicionar outra passagem através de mais de 100 elementos potenciais ... mas eu poderia apenas ter que.

Atualizar: Robin Mabensugestão parece que será umótimo solução alternativa! Sua sugestão é esconder os valores nodata-x atributo HTML5 personalizado. Isso parece estar funcionando apesar da minha (mais provável) página não compatível com HTML5. Por favor, vote na sua resposta, se você também considerar uma contribuição valiosa.

Atualizar: Confirmado. Eu implementei com sucesso a sugestão de Maben e, portanto, consegui reduzir o número de pesquisas de DOM - uma para cada elemento na minha página. Eu já estava percorrendo todos os DIVs com itens que queria mostrar e agora posso acessar automaticamente a propriedade de dados ao mesmo tempo. Isso se parece com isso na minha implementação:

<code><div style="display:none" data-call-number="..." id="stackLocatorLinkFillUp...">...</div>
</code>

As reticências indicam operações exclusivas para mim acontecendo. O id tem um indicador numérico simples que incrementa um por registro.

<code>// Loop through all of the items on the page that start with my id
$("[id^=stackLocatorLinkFillUp]").each( function() {
    // ...
    // Grab the contents of the div
    var innerContent = $(this).html();
    // Extract the call number out of the data-call-number field
    var callNumPreEncoded = $(this).data("callNumber");
    // ...eventually...
    $(this).html(...).css("display","block");
});
</code>

Obrigado a todos!

questionAnswers(3)

yourAnswerToTheQuestion