image
Inicio » Foros » JavaScript

JavaScript

Capturar texto

Volver al foro | Responder | Añadir nuevo tema


De: Gustavo
Fecha: 04/03/2007
Mensaje:

¡Qué tal!...

Apenas estoy aprendiendo este lenguaje y me topé con un problema que no puedo resolver.

Necesito 'capturar' el texto sobre el que pasa el mouse (durante el evento OnMouseOver), pasarlo a una variable y concatenarlo con otra. Y la verdad es que no tengo idea de cómo hacer que en dicho evento, en lugar de obtenerse un link, pueda obtenerse el texto.

Por ejemplo, suponiendo que en un párrafo figurase la palabra JabaScript, cuyo vínculo apuntase a  esta página, lo que necesito es cargar una variable con el valor "JavaScript" y no  con la referencia a "...webestilo.com/etc..."

Eso es todo, espero haber sido lo suficientemente claro...

Agradeceré cualquier ayuda...

Saludos y gracias...

PD: El sitio está muy bueno y es muy útil...




Quizás le interese
De: jbosch(vosk)
Util para: 5 personas

Fecha: 04/03/2007
Mensaje:

puedes recoger el texto de un elemento mediante

puntero_elemento.innerHTML

y luego para concatenarlo puedes usar el '+=' o puedes usar los de javascript para el trabajo con texto

resultado=texto.concat(otro_texto)

un ejemplo muy simple

<html><head><script language="JavaScript">
var ID,TX,HR;
var LISTA=new String();
function A(s)
{
ID=s.id;
TX=s.innerHTML;
HR=s.href;
LISTA=LISTA.concat(TX,",");
}
</script></head><body>
<a href="enlace0.htm" id="e0" onMouseOver="A(this);">Enlace 0</a><br>
<a href="enlace1.htm" id="e1" onMouseOver="A(this);">Enlace 1</a><br>
<a href="enlace2.htm" id="e2" onMouseOver="A(this);">Enlace 2</a><br>
</body></html>

las variables en mayusculas son globales: 'ID' es el identificador del ultimo elemento seleccionado, 'TX' es el texto visible, 'HR' la direccion del enlace, y 'LISTA' es la lista de textos seleccionados. al iniciar la página mueves el raton sobre el elemento 'e0', se ejecuta 'A()' y se envia como parámetro un puntero al elemento donde se produjo el evento; una vez en 'A()' guardo los valores que me interesan en las variables que crea necesarias. immediatamente despues de finalizar este planteamiento las variables quedan tal como

ID="e0"
TX="Enlace 0"
HR="enlace0.htm"
LISTA="Enlace 0,"

si luego pasas por 'e1' las globales quedan con los datos del nuevo elemento y la lista queda

LISTA="Enlace 0,Enlace 1," y etc...

es un ejemplo para ver como sacas varios valores de un elemento. si solo quieres el texto puedes enviar directamente a 'A()' como parametro el texto del elemento y concatenarlo a la variable global

<script...
var L=new String();
function A(t) {L=L.concat(t,",");}
<body...
<a... onMouseOver="A(this.innerHTML);">...

otra cosa, hazlo sin copiar/pegar

jbosch(vosk)

 





De: Gustavo
Util para: 1 personas

Fecha: 04/03/2007
Mensaje:

jbosch(vosk):

Agradezco mucho tu ayuda. Voy a probar lo que me indicas y ver si resulta, aunque parece ser que lo tenés bastante claro. Respecto a lo de "copiar y pegar", no entiendo bien la 'advertencia'. Si lo que querés decir es que no me limite a dar por resuelto el problema con tus líneas, te comento que dejé mi planteo como una cuestión general.

Aunque básicamente mi problema es (o era) 'capturar el texto', lo que quiero hacer con él difiere por completo de lo que me sugerís en tu ejemplo. Quiero decir: la idea es "aprender" no "robar", ¿me explico?...

En cualquier caso, te comento que no encuentro mejor forma de entender lo que me has explicado que seleccionar el código y volcarlo a una página en blanco para analizar bien cómo funciona, pero lo único que tomaré de él es lo que he pedido (que no es poca cosa cuando uno no lo sabe): 'pasar el texto que se encuentra bajo el puntero, a una variable string'. Eso es todo, el resto del código no me sirve para lo que busco, aunque me resultará muy útil para entenderte...

Estoy "diseñando" un sitio (el primero de mi vida) y no me molestaría (casi que es una obligación) dar el crédito que merezcan aquellos que me han ayudado a superar algunos inconvenientes de programación y/o diseño, en una página dedicada a tal efecto. Lo único que no haría es dar ese crédito a un 'seudónimo', porque he notado que, con el afán de 'parecer' más que el de 'ser', hay personas que responden a este tipo de cuestiones haciendo uso de las respuestas de otros -es decir: del conocimiento de otros-, en cuyo caso no son los verdaderos artífices de la solución dada y, por lo tanto, no se si son o no, 'merecedores' de alguna clase de reconocimiento...

Yo adjunto mi correo a los mensajes, así que -si quisieiras- podrías enviarme tus datos, aunque no se si te gustará aparecer en una página de mi sitio, cuando este 'esté en el aire', porque puede ser que el funcionamiento, el diseño, o el contenido no sean de tu agrado o no estén a la altura, y prefieras no aparecer por ninguna parte...

En fin, trato de respetar el trabajo que se ha tomado quien llegó a solucionar lo que yo no pude o no supe, pero a veces, se hace complicado y/o muy lento. Pero hay gente que malinterpreta la libertad que existe en esto... yo hago lo posible por diferenciarme de ella...

 

De nuevo, gracias por tu ayuda...

Saludos...

 

Gustavo





De: jbosch(vosk)
Util para: 0 personas

Fecha: 05/03/2007
Mensaje:

saludos gustavo, lo de copiar/pegar va por lo de aprender tal como tu has dicho.

otra cosa, participo en este foro (y otros) como hobby, no como forma de buscarme publicidad en otras páginas, por lo  que si añades un mínima referencia estaré mas que contento (por otra parte hay poca gente que lo haga, y aun por otra parte no tienes ninguna obligacion de hacerlo fuera de tu propia obligacion moral).

pero antes de nada comprueba si puedes adaptar el ejemplo que colgué a tu trabajo.

jbosch(vosk)






De: Gustavo
Util para: 0 personas

Fecha: 07/03/2007
Mensaje:

 Bueno jbosch(vosk), te comento:

Resolví mi problema gracias a tus líneas. En realidad lo que intento hacer supera mis conocimientos sobre este lenguaje. Aunque es bastante comprensible yo sólo 'me defiendo un poco' en VB6, pero estuve leyendo tutoriales de JS y de verdad es bastante claro. Lo único que no encontré bien detallado es un índice de los objetos y sus propiedades (help).

Además -estoy usando DreamWeaber- y la depuración del código es imposible. (Ojo, también estoy empezando con Dreamweaber, así que esto último puede no ser correcto). Por otra parte, descargué e instalé un depurador llamado Firebug, que llena un poco ese vacío.

Ahora me topé con el siguiente problema:

Quisiera aplicar el código, así como se aplica un estilo. Voy a tratar de explicarlo:

El comportamiento que busco, es similar al que realiza FireFox como traductor (que si no me equivoco, usa un complemento o un plugin de Google), de ahí la necesidad de recuperar el texto bajo el mouse. Con tu ayuda, pude hacer trabajar el menú sin problemas, pero debo aplicarlo a cada termino (cada palabra que decida que necesite usarlo) y, demás está decir, sería más que tortuoso aplicar el efecto en múltiples páginas a multitud de palabras dispersas. Si pudiera asociar el código a un estilo, la cosa cambiaría significativamente.

Con la idea, también apareció el problema adicional de establecer la posición del menú. Dreamweaber lo hace automáticamente al insertar el fragmento de código, pero, por mi desconocimiento de los objetos y sus propiedades en JS, no encuentro la forma. No se si habrás utilizado Visual, pero en él, al escribir código sobre un objeto, se despliega de forma automática una lista de sus propiedades o eventos. Esto simplifica enormemente escribirlo, ya que -al menos para mí- es imposible tenerlos presentes. Si existe algún editor de JS que haga eso: POR FAVOR decime (o 'dime'; sospecho que eres español) cuál es.

En cualquier caso, no quiero abusar de tu predisposición a ayudar (no tengo forma de retribuirla) así que entenderé si te limitas a responder parcialmente o a no responder nada...

Gracias, de nuevo...

Saludos...

Gustavo





De: Gustavo
Util para: 0 personas

Fecha: 08/03/2007
Mensaje:

PD:

No es esta la totalidad de los objetos... ¿o sí?...

window, frame, location, history y navigator, document, anchor, link e image....





De: Gustavo
Util para: 0 personas

Fecha: 08/03/2007
Mensaje:

PD:
A excepción de los 'objeos del lenguaje' y los 'objetos de formulario',no puede ser esta la totalidad de los restantes... ¿o sí?...

window, frame, location, history y navigator, document, anchor, link e image....





De: jbosch(vosk)
Util para: 0 personas

Fecha: 08/03/2007
Mensaje:

creo que ya veo a lo que te refieres: sin usar ninguna etiqueta especial para ello, al hacer click sobre una palabra que se ejecute un script que trabaje con esa palabra (que la traduzca, la guarde, o haga lo que sea). la cosa es simple, y javascript te ofrece la funciones necesarias 'prefabricadas' (aunque como siempre msie tiene su propia sintaxi). esta es una forma de hacerlo

<html><head><script language=javascript>
function A()
{
var t=new String("");
if(document.selection)
 {
 t=document.selection.createRange().text;
 }
else if(document.getSelection)
 {
 t=window.getSelection();
 }
else if(window.getSelection)
 {
 t=window.getSelection();
 }
alert(t);
delete t;
}
</script></head><body onMouseUp="A();">
Esto es una prueba de texto.
</body></html>

como ves la sintaxi es muy simple; los condicionales son para el filtrado del navegador donde 'document.selection' indica msie, y los otros indican nsn; 'document.getSelection()' es para los nsn anteriores a nsn7 (creo), y 'window.getSelection()' es para los navegadores actuales. observa que aquí hay algo que falta si quiero usar esto en los nsn antiguos: el manejador de eventos del body tendrá que situarse como evento para el documento (al final de script)

document.onmouseup=A;
if (!document.all) document.captureEvents(Event.MOUSEUP);

esto es solo para compatibilidad con navegadores 'viejos', con los de ahora no es necesario aunqué aún lo soportan (supongo que puedes ahorrártelo).

siguiendo el ejemplo, al final de los condicionales en la variable 't' tienes el texto seleccionado, puedes guardarlo en una lista, o sobreescribirlo en una variable global (es ese caso no será necesaria esa variable 't'), o lo que quieras para luego trabajar con ese texto.

facil eh?

por lo que me comentas de los objetos, puedo decirte que no tengo ni idea, creo que si pero puede que falten algunos (de todas formas observa que no son exactamente objetos, sino listas de elementos que los puedes recorrer con [indice], p.ej. si substituyes la funcion 'A()' de mi ejemplo anterior por

function A() {alert(window['A']);}

en cada onmouseup verás el codigo fuente de esta funcion. en cada documento la lista de objetos es diferente en funcion del contenido, prueba el siguiente script en un navegador no msie

<script>
for(q in window) {document.write(window[q]+"<br>");}
document.close();
</script>

verás que aparecen funciones, objetos (listas) y valores numericos (en msie tambien aparece la lista pero no se especifican los nombres, supongo que habrá alguna forma de acceder a ellos). esa lista es lo que soporta el objeto (o la lista) 'window' porqué en el bucle trabajo con 'window'. de forma parecida la lista 'frames' tendrá sus elementos y funciones, y así con las demás listas de elementos. de todas formas no es una lista real de lo soportado sino una lista de lo soportado en el codigo cargado (si no hay imagenes no aparecera el objeto (lista) 'image'). supongo que en cualquier manual que encuentres por la red tendrás una lista completa de los objetos.

por cierto, yo uso el bloc de notas y estoy 'en contra' de los dweaver, fpage, etc... tampoco he usado nunca el vbasic, y el mejor depurador que conozco es la 'JavaScript Console' de nsn, que equivale a la barra de estado de msie cuando se produce un error.

no se si té habré solucionado algo con esto; ah, y del ejemplo otra vez sin copiar/pegar :), todo se reduce a 'selectior.createRange().text' y a  'getSelection()', que es muy fácil de recordar y mas aún de usar.

jbosch(vosk)





De: Gustavo
Util para: 0 personas

Fecha: 09/03/2007
Mensaje:

jbosch(vosk):

Entré varias vaces esperando tu respuesta y me alegro de haberla encontrado. Como bien señalaste -aparentemente- el problema se reduce a las líneas indicadas, por lo que de nada me serviría pegar el código, (aunque insisto en que es la mejor forma de entenderlo).

Me pregunto si de casualidad eres docente, o si también has profundizado en esto simplemente por hooby...

En cualquier caso tus repsuestas han sido más que satisfactorias, las leo con la atención que un alumno le dedica a un buen maestro...

Te vuelvo a agradecer la ayuda. Voy a probar lo sugerido y luego te contaré como ha resultado...

GRACIAS...

Ojalá no te canses de eseñarme...

Saludos...

Gustavo





De: Gustavo
Util para: 0 personas

Fecha: 12/03/2007
Mensaje:

Conseguí resolverlo. Pero ahora no puedo posicionar el menú. Las funciones que encontré para detectar la posición del puntero (para usarlas para posicionar el menú) sólo funcionan correctamente en IE. En Mozilla... "ni noticias"... devuelven errores cuando depuro el código...

Aunque es probable que te haya cansado, si tienes resto, siempre será bueno recibir tu lección. De lo contrario "no hay drama", (demoraré más tiempo, pero aprenderé algo en el camino)...

Gracias por tu ayuda y tu atención...

Saludos...

Gustavo





De: jbosch(vosk)
Util para: 0 personas

Fecha: 12/03/2007
Mensaje:

no tengo el nivel suficiente para dar lecciones; de todas formas te voy a indicar algo que seguramente va ayudarte: tanto msie como nsn (creo que las versiones posteriores al nsn4) soportan 'clientX' y 'clientY', que es la posicion del mouse dentro del area cliente. esto se aplica al evento que ejecuta la funcion que contiene estas llamadas; p.ej. si usas el onmouseup tendras una funcion que empieza tal como

function B(e)
{
if(!e) {var e=window.event;}
...
}

de momento en 'e' tienes el evento que ejecuta a esa funcion; en los nsn la funcion se ejecuta sin parámetro, es decir que recoges el evento con 'window.event'; en msie se envia como parámetro el evento, con lo que no tienes que hacer nada extra. los siguiente es trabajar con el evento, y como siempre cada navegador usa su propia sintaxi (si, ya se que antes he comentado que msie y nsn soportan dos instrucciones iguales); para nsn con 'pageX,pageY' recoges la posicion del puntero en cualquier situacion de scroll, es decir que

if(e.pageX)
 {
 px=e.pageX;
 py=e.pageY;
 }

en cambio en msie no existe tal instruccion sino que tienes que usar el 'clientX,clientY' y añadirle las posiciones de scroll del documento y del objeto body para que funcione en cualquier situacion de scroll

if(e.clientX)
 {
 px=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
 py=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;
 }

si solo vas a trabajar en una área no desplegada solo necesitarás el 'clientX,xlientY'. juntandolo todo quedará algo parecido a

function B(e)
{
var px,py;
if(!e) {var e=window.event;}
if(e.pageX)
 {
 px=e.pageX;
 py=e.pageY;
 }
else if(e.clientX)
 {
 px=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
 py=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;
 }
window.status=px+","+py;
}

otra cosa, para aplicar los eventos de forma compatible a nsn tienes que hacerlo a la antigua, es decir que tienes que aplicar los manejadores de evento para el documento dentro del script

<script...>
function B(e) {...}
document.onmouseup=B;
</script>

y para los nsn anteriores a la version 6 tienes que usar algo aún mas antiguo

<script...>
if(document.captureEvents)
 {
 document.captureEvents(Event.MOUSEUP);
 }
document.onmouseup=B;
function B(e){...}
</script>

observa que esta forma de aplicar manejadores de eventos es para compatibilizar nsn con msie; si solo tuvieras que trabajar en msie podrías dejar el evento en la etiqueta del body y el navegador se encarga de enviar el evento como parámetro; en cambio haciendolo igual en nsn no se envia ningun puntero al evento ni se crea ningun evento previo a la funcion a la que llamas('window.event' será nulo porqué aún no se ha creado).

esto funciona (o tendría que funcionar) en todos los navegadores actuales, pero solo lo he comprobado en msie6 y nsn7 (en los otros no tengo ni idea), tendrías que comprobar todo esto en otros navegadores o buscar mas informacion de compatibilidad de estas funciones.

jbosch(vosk)





De: Gustavo
Util para: 0 personas

Fecha: 13/03/2007
Mensaje:

Gracias jbosch(vosk)...

Te comento que he probado algunas alternativas similares a las sugeridas y no he tenido suerte (con Mozilla). Pero -como siempre- has aportado cosas que tendré que probar.

Lo que no te dije es que el código lo tengo en un 'módulo' independiente (*.js). Trato de hacerlo así porque me resulta más legible y 'depurable'. ¿Es posible que esto último me genere algún conflicto?. Lo que hice fue crear una función -dentro del js- a la que llamo desde HTML. Expresiones similares a px=e.clientX+document.body.scrollLeft+document...  me devuelven un valor, para 'x' y para 'y' en MSIE, pero en Mozilla sólo recibo errores y valores 'indefinidos'...

Voy a probar lo que has dejado...

Gracias por tu ayuda...

Saludos...

Gustavo

PD: En este lenguaje no hay métodos "antiguos" o "viejos" para mí... Todo es nuevo, nuevo, nuevo...





De: jbosch(vosk)
Util para: 0 personas

Fecha: 14/03/2007
Mensaje:

que lo tengas en archivos independientes no es motivo de error (no se si usado dos archivos, cuando uno está cargado al intentar ejecutar algo del segundo cuando ese aún no se ha cargado dará algun error, tendré que comprobarlo).

jbosch(vosk)





De: Gustavo
Util para: 0 personas

Fecha: 19/03/2007
Mensaje:

Bueno:

Me costó bastante entenderte, así que seguí buscando aquí y allá. Encontré algunos ejemplos más, aquí mismo´. Leí, probé... ¡y conseguí hacerlo funcionar!...

Eso sí, cuando conseguí hacerlo funcionar en Mozilla, volví a IE, y el menú se deplegaba donde le parecía. Entonces releí tu código y encontré el problema (... e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
...)... Otra vez, me sirvió de mucho tu ayuda...

Pero debo confesarte que no puedo evitar "copiar y pegar" porciones de código. Es la forma más rápida de aprender. Tené (ten) en cuenta que las aplicaciones que tengo para editar en JS, carecen de cualquier tipo de ayuda y/o asistencia, apenas si 'resaltan' la palabras claves del lenguaje...

En fin, seré 'un poco lento', pero no un mentiroso...

Agradezco mucho tu ayuda y, seguramente, volveré a molestarte en otro momento...

Hasta pronto y, otra vez...

GRACIAS

Saludos...

Gustavo





De: jbosch(vosk)
Util para: 0 personas

Fecha: 19/03/2007
Mensaje:

>>"Tené (ten) en cuenta que las aplicaciones que tengo para editar en JS, carecen de cualquier tipo de ayuda y/o asistencia, apenas si 'resaltan' la palabras claves del lenguaje..."<<

pues no veas mi bloc de notas, no resalta ni las mayusculas :) habitualmente los ide's solo sirven (a mi parecer) para trabajar rápido y depurar facilmente, nada que no puedas hacer en el bloc de notas y el navegador.

jbosch(vosk)





De: Gustavo
Util para: 0 personas

Fecha: 20/03/2007
Mensaje:

Si, jbosch(vosk), pero tú ya dominas el lenguaje...

No puedes exigirle a alguien que no conoce un idioma, que no recurra a un diccionario... Estaríais limitando su aprendizaje, o, al menos, 'demorándolo'...

"Yo aún uso el diccionario para escribir en mi propio idioma"...

Que tú tengas el 'don' de estructurar lógicamente una serie de instrucciones que luego se ejecutarán tal cual lo has previsto, es una virtud que no todos poseen, ni tienen obligación de poseer...

Siempre estoy dispuesto a escuchar (o a leer) a quien sabe más que yo sobre lo que me interesa, lo hago con el respeto y la humildad que debería tener todo 'ignorante'. Pero una vez que leí o escuché, me reservo el derecho de elegir la forma de asimilar lo aprendido de la manera que a mí me resulte más comprensible, aunque, seguramente, no será la mejor...

En fin, no podría escribir en ningún lenguaje sin un poco de ayuda y, sinceramente, no creo que nadie se tome el trabajo de volver a tipear una instrucción expuesta como ejemplo, para ver si funciona...

Lo que si puedo garantizarte es que el resultado final no tiene absolutamente nada que ver con los códigos de ejemplo. Algunas instrucciones, por supuesto, inevitablemente son necesarias (¿se puede determinar la posición del puntero del mouse en JS, para IE, de otra forma que no sea esta: "..."e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
"..."?, puede haber otra, pero ¿cuántas?).

Lo que quiero decir es:

"Siempre podremos hacer un carro diferente, sin que para ello nos veamos en la obligación de reinventar la rueda", ¿no te parece?...

Un saludo y... otra vez....

MUCHAS GRACIAS...

Gustavo





De: Patrón
Util para: 0 personas

Fecha: 27/03/2007
Mensaje:

Buenas primero mi mail es un_programador-mas@yahoo.com.mx, lo pongo aqui pues el campo de Email no es suficiente para mi correo.....
Tengo una pregunta.
He leido este foro y estaba mirando el funcionamiento de seleccionar un texto y mostrar en un alert dicha selección. En efecto funciona perfecto, pero me surge una duda:

es posible seleccionar una palabra de un texto sin el mouse por javascript????

es decir, en un evento onload del body hacer que por ej un input type text tenga el valor "Esto es una prueba" y que muestre seleccionado la palabra "una" solamente??? la verdad he intentado pero no me ha dado resultado, espero saber si alguien tiene algo al respecto, gracias.



De: Gustavo
Util para: 0 personas

Fecha: 02/04/2007
Mensaje:

Patrón:

Deberías agregar el mensaje como un nuevo tema ("Añadir nuevo tema"), para obtener alguna respuesta.

Por mi parte, entro a este foro, y a otros, tratando de aprender, buscando respuestas (preguntas, tengo de sobra)...

En este foro hay algunos usuarios que tienen conocimientos avanzados y experiencia en este lenguaje. jbosch(vosk) y ZeroKilled son dos de ellos (por lo que pude leer y por la ayuda recibida por parte de jbosch(vosk), me inclino a creer que son de los más experimentados ,y he leído unos cuántos mensajes. Pero, por supuesto, puede -o debe- haber otros)...

Por otro lado, trata de ser un poco más claro al realizar la consulta, para que todos te entiendan...

Un saludo....

Suerte, y hasta la próxima...

PD: Y, no lo tomes a mal, perooo... ¿no tienes otro 'nick'?...





De: paula
Util para: 0 personas

Fecha: 11/04/2007
Mensaje:

hola, que tal.

les comento, la verdad no se nada de programacion, lo que hago es plagiar codigos que me gustan.

un dia navegando me encontre con una pagina en la que habia un efecto, era un carrusel  muy bonito, logre conseguirlo, pero a la hora de ponerlo en marcha las imagenes no me cargan.

si alguien cree que puede ayudarme, por favor seria de mucha ayuda, gracias.





Volver al foro | Responder | Añadir nuevo tema

Quizás le interese:

WebEstilo.com no se hace responsable de las opiniones que los usuarios puedan verter en cualquiera de los foros existentes.

Si te solucionó el problema pulsa en G+1


Gracias!






Comparte



Última modificación:31 de Agosto de 2017. Spain - Espa�a.
© 1998-2004 por . Todos los derechos reservados.