Cómo resaltar / seleccionar el contenido de una etiqueta DIV cuando el usuario hace clic en el DIV ... la idea es que todo el texto esté resaltado / seleccionado para que el usuario no necesite resaltar manualmente el texto con el mouse y potencialmente te pierdas un poco del texto?
Por ejemplo, supongamos que tenemos un DIV de la siguiente manera:
<div id="selectable">http://example.com/page.htm</div>
... y cuando el usuario hace clic en cualquiera de esa URL, se resalta todo el texto de la URL para que pueda arrastrar fácilmente el texto seleccionado en el navegador, o copiar la URL completa con un clic derecho.
¡Gracias!
fuente
document.getElementById('selectable')
porthis
. Luego puede agregar la funcionalidad discretamente a varios elementos, por ejemplo, varios divs en un contenedor:jQuery('#selectcontainer div').click(selectText);
if (window.getSelection) {
debe ser primero para Opera ( quirksmode.org/dom/range_intro.html )window.getSelection().removeAllRanges();
anteswindow.getSelection().addRange(range);
ACTUALIZACIÓN 2017:
Para seleccionar el contenido del nodo, llame:
Esto funciona en todos los navegadores modernos, incluido IE9 + (en modo estándar).
Ejemplo ejecutable:
La respuesta original a continuación es obsoleta ya que
window.getSelection().addRange(range);
ha quedado en desusoRespuesta original
Todos los ejemplos anteriores usan:
pero el problema con eso es que selecciona el Nodo en sí, incluida la etiqueta DIV, etc.
Para seleccionar el texto del nodo según la pregunta de OP, debe llamar en su lugar:
Entonces el fragmento completo sería:
fuente
this
lugar de obtener el elemento basado en la ID siempre que esté dentro delclick
oyente del elemento .Hay una solución CSS4 pura:
user-select
es una especificación de nivel 4 del módulo CSS, que actualmente es una propiedad de borrador y no estándar de CSS, pero los navegadores lo admiten bien - vea # search = user-select .Lea más sobre selección de usuario aquí en MDN y juegue con él aquí en w3scools
fuente
La respuesta de Neuroxik fue realmente útil. Solo tuve un problema con Chrome, porque cuando hice clic en un div externo, no funcionó. Podría resolverlo eliminando los rangos anteriores antes de agregar el nuevo rango:
fuente
Para contenido editable (no entradas regulares, debe usar selectNodeContents (en lugar de solo selectNode).
NOTA: Todas las referencias a "document.selection" y "createTextRange ()" son para IE 8 y versiones inferiores ... Es probable que no necesite admitir ese monstruo si está intentando hacer cosas difíciles como esta.
fuente
Usando un campo de área de texto, puede usar esto: (Vía Google)
Así es como veo que la mayoría de los sitios web lo hacen. Simplemente lo diseñan con CSS para que no se vea como un área de texto.
fuente
this.focus();this.select();
?Este fragmento proporciona la funcionalidad que necesita . Lo que debe hacer es agregar un evento a ese div que active fnSelect en él. Un truco rápido que no deberías hacer y que posiblemente no funcione, se vería así:
Obviamente, suponiendo que se haya incluido el enlace al fragmento.
fuente
Me pareció útil envolver esta función como un complemento jQuery:
Por lo tanto, se convierte en una solución reutilizable. Entonces puedes hacer esto:
Y se seleccionará prueba en el div.
fuente
¿Qué tal esta solución simple? :)
Claro que no es construcción div, como mencionaste, pero aún así funcionó para mí.
fuente
Niko Lay: ¿Qué tal esta solución simple? :)
.....
Código antes:
Código después de:
Solo esta parte onclick = "this.select ();" id = "seleccionable" en mi código funcionó bien. Selecciona todo en mi cuadro de código con un clic del mouse.
Gracias por la ayuda Niko Lay!
fuente
La respuesta anterior no funciona en Chrome porque addRange elimina el rango agregado anterior. No encontré ninguna solución para esto además de la selección falsa con css.
fuente
Se logra fácilmente con la propiedad css user-select set to all. Me gusta esto:
fuente