Gostaria que os usuários cliquem em um link e, em seguida, ele seleciona o texto HTML em outro elemento ( não uma entrada).
Por "selecionar", quero dizer da mesma maneira que você selecionaria o texto arrastando o mouse sobre ele. Isso tem sido motivo de pesquisa, porque todo mundo fala sobre "selecionar" ou "destacar" em outros termos.
Isso é possível? Meu código até agora:
HTML:
<a href="javascript:" onclick="SelectText('xhtml-code')">Select Code</a>
<code id="xhtml-code">Some Code here </code>
JS:
function SelectText(element) {
$("#" + element).select();
}
Estou perdendo algo flagrantemente óbvio?
javascript
jquery
Jason
fonte
fonte
Respostas:
Javascript simples
Aqui está uma demonstração de trabalho . Para aqueles que procuram um plugin jQuery, eu também fiz um .
jQuery (resposta original)
Eu encontrei uma solução para isso neste tópico . Consegui modificar as informações fornecidas e misturá-las com um pouco de jQuery para criar uma função totalmente impressionante para selecionar o texto em qualquer elemento, independentemente do navegador:
fonte
browser
sniffer.Aqui está uma versão sem farejador de navegador e sem dependência do jQuery:
fonte
div contentEditable='true'
?O código de Jason não pode ser usado para elementos dentro de um iframe (como o escopo difere da janela e do documento). Corrigi o problema e o modifiquei para ser usado como qualquer outro plugin do jQuery (encadeado):
Exemplo 1: Seleção de todo o texto dentro das tags <code> com um único clique e adicione a classe "selecionada":
Exemplo 2: Ao clicar no botão, selecione um elemento dentro de um Iframe:
Nota: lembre-se de que a origem do iframe deve residir no mesmo domínio para evitar erros de segurança.
Plugin jQuery:
Eu testei no IE8, Firefox, Opera, Safari, Chrome (versões atuais). Não tenho certeza se funciona em versões mais antigas do IE (sinceramente, não me importo).
fonte
Esta discussão contém coisas realmente maravilhosas. Mas não consigo fazer isso direito nesta página usando o FF 3.5b99 + FireBug devido a "Erro de segurança".
Yipee !! Consegui selecionar toda a barra lateral direita com este código, espero que ajude você:
PS: - Não pude usar objetos retornados por seletores jquery como
fonte
Você pode usar a seguinte função para selecionar o conteúdo de qualquer elemento:
Esta função pode ser chamada da seguinte maneira:
fonte
Eu estava procurando a mesma coisa, minha solução foi a seguinte:
fonte
focus()
em uma não entrada, que é a questão desta pergunta.Gostei da resposta de lepe, exceto por algumas coisas:
Aqui está o que eu criei, com um aceno de cabeça para a resposta de Lepe em busca de inspiração. Tenho certeza de que serei ridicularizado, pois isso talvez seja um pouco pesado (e na verdade poderia ser mais, mas eu discordo). Mas funciona e evita farejar o navegador, e esse é o ponto .
É isso aí. Parte do que você vê é de legibilidade e / ou conveniência. Testado no Mac nas versões mais recentes do Opera, Safari, Chrome, Firefox e IE. Também testado no IE8. Também normalmente declaro apenas variáveis se / quando necessárias dentro de blocos de código, mas o jslint sugeriu que todas elas fossem declaradas no topo. Ok jslint.
Editar Eu esqueci de incluir como vincular isso ao código da operação:
Felicidades
fonte
setBaseAndExtent()
apenas porque existe parece inútil para mim quando você pode simplesmente remover esse ramo e tudo funciona tão bem quanto de maneira baseada em padrões. A detecção de recursos é boa, mas eu me cansaria de testar tudo rapidamente.setBaseAndExtent
é que é significativamente mais eficiente, e mesmo com aif
declaração adicional ainda é muito mais do que se você "remover esse ramo". Eu realmente não entendo o comentário de "Eu me cansaria .."? Escreva e esqueça, a única coisa que você precisa fazer é chamar a função, não escrevê-la. :)setBaseAndExtent
tivesse um desempenho significativamente maior que oaddRange
. Por que seria? Meu outro comentário foi relacionado ao ethos de teste de recursos estendido a todas as interações do DOM: é muito código para testar todos os métodos e propriedades do DOM antes de usá-lo. Eu não desaprovo; Estou feliz em traçar a linha e fazer mais algumas suposições no meu código.Uma versão atualizada que funciona no chrome:
http://jsfiddle.net/KcX6A/326/
fonte
Para qualquer tag, é possível selecionar todo o texto dentro dessa tag por este código curto e simples. Ele destacará toda a área da etiqueta com a cor amarela e selecionará o texto dentro dela com um único clique.
fonte
lepe - Isso funciona muito bem para mim, obrigado! Coloquei seu código em um arquivo de plug-in e, em seguida, usei-o em conjunto com cada instrução, para que você possa ter várias pré tags e vários links "Selecionar tudo" em uma página e escolher a pré correta para destacar:
fonte
Dê uma olhada no objeto Selection (mecanismo Gecko) e no objeto TextRange (mecanismo Trident.) Não conheço nenhuma estrutura JavaScript que tenha suporte entre navegadores para isso implementado, mas também nunca o procurei. é possível que até o jQuery tenha.
fonte
O método de Tim funciona perfeitamente para o meu caso - selecionando o texto em uma div para o IE e o FF após a substituição da seguinte declaração:
com o seguinte:
O texto na div é selecionado clicando nele com a seguinte função jQuery:
fonte
aqui está outra solução simples para selecionar o texto na forma de string, você pode usar essa string facilmente para acrescentar um filho do elemento div ao seu código:
fonte
Meu caso de uso específico foi selecionar um intervalo de texto dentro de um elemento de extensão editável que, até onde pude ver, não está descrito em nenhuma das respostas aqui.
A principal diferença é que você precisa passar um nó do tipo
Text
para oRange
objeto, conforme descrito na documentação de Range.setStart () :O
Text
nó é o primeiro nó filho de um elemento de extensão; portanto, para obtê-lo, acessochildNodes[0]
ao elemento de extensão. O resto é o mesmo que na maioria das outras respostas.Aqui está um exemplo de código:
Outra documentação relevante: Seleção de
intervalo Document.createRange () Window.getSelection ()
fonte
Adicionado
jQuery.browser.webkit
ao "else if" no Chrome. Não foi possível fazer isso funcionar no Chrome 23.Crie este script abaixo para selecionar o conteúdo em uma
<pre>
tag que possui oclass="code"
.fonte
De acordo com a documentação do jQuery de
select()
:A sua explicação é por que o jQuery
select()
não funcionará neste caso.fonte