Me gustaría que los usuarios hagan clic en un enlace, luego selecciona el texto HTML en otro elemento ( no una entrada).
Por "seleccionar" me refiero a la misma forma en que seleccionaría texto arrastrando el mouse sobre él. Esto ha sido difícil de investigar porque todos hablan de "seleccionar" o "resaltar" en otros términos.
es posible? Mi código hasta ahora:
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();
}
¿Me estoy perdiendo algo descaradamente obvio?
javascript
jquery
Jason
fuente
fuente
Respuestas:
Javascript simple
Aquí hay una demostración en funcionamiento . Para aquellos de ustedes que buscan un complemento jQuery, también hice uno de esos .
jQuery (respuesta original)
He encontrado una solución para esto en este hilo . Pude modificar la información dada y mezclarla con un poco de jQuery para crear una función totalmente increíble para seleccionar el texto en cualquier elemento, independientemente del navegador:
fuente
browser
sniffer.Aquí hay una versión sin rastreo del navegador y sin confianza en jQuery:
fuente
div contentEditable='true'
?El código de Jason no se puede usar para elementos dentro de un iframe (ya que el alcance difiere de la ventana y el documento). Solucioné ese problema y lo modifiqué para usarlo como cualquier otro complemento jQuery (encadenable):
Ejemplo 1: Selección de todo el texto dentro de las etiquetas <código> con un solo clic y agregue la clase "seleccionado":
Ejemplo 2: al hacer clic en el botón, seleccione un elemento dentro de un Iframe:
Nota: recuerde que la fuente del iframe debe residir en el mismo dominio para evitar errores de seguridad.
Complemento jQuery:
Lo probé en IE8, Firefox, Opera, Safari, Chrome (versiones actuales). No estoy seguro de si funciona en versiones anteriores de IE (sinceramente, no me importa).
fuente
Este hilo contiene cosas realmente maravillosas. Pero no puedo hacerlo bien en esta página usando FF 3.5b99 + FireBug debido a "Error de seguridad".
Yipee !! Pude seleccionar toda la barra lateral derecha con este código, espero que te ayude:
PD: - No pude usar objetos devueltos por selectores jquery como
fuente
Puede usar la siguiente función para seleccionar el contenido de cualquier elemento:
Esta función se puede llamar de la siguiente manera:
fuente
Estaba buscando lo mismo, mi solución fue esta:
fuente
focus()
en una no entrada, de eso se trata esta pregunta.Me gustó la respuesta de Lepe, excepto por algunas cosas:
Esto es lo que se me ocurrió, con un guiño a la respuesta de Lepe en busca de inspiración. Estoy seguro de que seré ridiculizado ya que esto es quizás un poco duro (y en realidad podría ser más, pero me estoy desviando). Pero funciona y evita el rastreo del navegador y ese es el punto .
Eso es. Algo de lo que ve es la legibilidad y / o conveniencia. Probado en Mac en las últimas versiones de Opera, Safari, Chrome, Firefox e IE. También probado en IE8. Además, normalmente solo declaro variables si es necesario dentro de los bloques de código, pero jslint sugirió que todas se declaren en la parte superior. Ok jslint.
Editar Olvidé incluir cómo vincular esto con el código de operación:
Salud
fuente
setBaseAndExtent()
solo porque existe me parece inútil cuando simplemente puedes eliminar esa rama y todo funciona igual de bien y de una manera basada en estándares. La detección de funciones es buena, pero me cansaría de probar todo lo que se hace a fondo bastante rápido.setBaseAndExtent
es que es significativamente más eficiente, e incluso con el estado agregadoif
aún es mucho más que si se "elimina esa rama". ¿Realmente no entiendo el comentario de "Me cansaría ..."? Escríbelo y olvídalo, lo único que tienes que hacer es llamar a la función, no escribirla. :)setBaseAndExtent
fuera significativamente más eficiente queaddRange
. ¿Por qué sería? Mi otro comentario estaba relacionado con su ethos de prueba de características extendido a toda interacción DOM: es una gran cantidad de código para probar cada método y propiedad DOM antes de usarlo. No desapruebo; Estoy feliz de trazar la línea y hacer algunas suposiciones más en mi código.Una versión actualizada que funciona en Chrome:
http://jsfiddle.net/KcX6A/326/
fuente
Para cualquier etiqueta, se puede seleccionar todo el texto dentro de esa etiqueta mediante este código corto y simple. Destacará toda el área de la etiqueta con color amarillo y seleccionará el texto dentro de ella con un solo clic.
fuente
lepe - Eso me funciona muy bien, gracias! Puse su código en un archivo de complemento, luego lo usé junto con cada una de las declaraciones para que pueda tener múltiples etiquetas pre y múltiples enlaces "Seleccionar todo" en una página y selecciona la pre correcta para resaltar:
fuente
Eche un vistazo al objeto Selection (motor Gecko) y al objeto TextRange (motor Trident). No conozco ningún framework de JavaScript que tenga implementado soporte para varios navegadores, pero tampoco lo he buscado, así que nunca lo he buscado, así que Es posible que incluso jQuery lo tenga.
fuente
El método de Tim funciona perfectamente para mi caso: seleccionando el texto en un div para IE y FF después de reemplazar la siguiente declaración:
con lo siguiente:
El texto en el div se selecciona haciendo clic con la siguiente función jQuery:
fuente
Aquí hay otra solución simple para obtener el texto seleccionado en forma de cadena, puede usar esta cadena fácilmente para agregar un elemento div en su código:
fuente
Mi caso de uso particular fue seleccionar un rango de texto dentro de un elemento span editable, que, por lo que pude ver, no se describe en ninguna de las respuestas aquí.
La principal diferencia es que debe pasar un nodo de tipo
Text
alRange
objeto, como se describe en la documentación de Range.setStart () :El
Text
nodo es el primer nodo hijo de un elemento span, por lo que para obtenerlo, accedachildNodes[0]
al elemento span. El resto es igual que en la mayoría de las otras respuestas.Aquí un ejemplo de código:
Otra documentación relevante:
Range
Selection
Document.createRange ()
Window.getSelection ()
fuente
Agregado
jQuery.browser.webkit
a "else if" para Chrome. No se pudo hacer que esto funcione en Chrome 23.Hizo este script a continuación para seleccionar el contenido en una
<pre>
etiqueta que tiene elclass="code"
.fuente
De acuerdo con la documentación de jQuery de
select()
:Hay una explicación de por qué jQuery
select()
no funcionará en este caso.fuente