Foros del Web » Programando para Internet » Javascript »

Seleccionar texto y comparar

Estas en el tema de Seleccionar texto y comparar en el foro de Javascript en Foros del Web. Hola! Estoy intentando hacer lo siguiente: Tengo un array en javascript con datos que obtengo de una tabla de mi respectiva base de datos. A ...
  #1 (permalink)  
Antiguo 14/06/2012, 03:34
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Seleccionar texto y comparar

Hola!

Estoy intentando hacer lo siguiente:

Tengo un array en javascript con datos que obtengo de una tabla de mi respectiva base de datos.

A continuación tengo un texto en un textarea (lo ideal sería tenerlo fuera del textarea, pero si saco el texto del textarea no me funciona).

Quiero que al seleccionar alguna parte de texto, aparezca un alert que me indique si esa palabra ó palabras existen o no en el array. Pero no lo consigo.

Os pego el código.

Aquí cargo los datos de la BD en un array en php.

Código PHP:
include("./funciones/conexion.php");
conexion();

$sql=mysql_query("SELECT Nombre FROM islas ORDER BY islas DESC"); 
$i=mysql_num_rows($sql);
$c=1;

while(
$islas=mysql_fetch_array($sql))

    
$lista.="\"".$islas['Nombre']."\""
    
    if(
$c<$i)
    {
        
$lista.=",";
    }
        
    
$c++;
}    

?> 
A continuación, la función que lee los caracteres seleccionados, además declaro el array en Javascript con los datos del array en PHP.

Código:
<script type="text/javascript">

$(document).ready(function(){

        $("#texto").select(function(){          
                var origen = document.getSelection();
		$("#resultado").html("" + origen);
		
		var lista = new Array(<?php echo $lista;?>);
		
				
        });     
});   


</script>
El BODY del HTML:

Código HTML:
<form id="miformu">
        <label for="texto">Selecciona parte del texto:</label><br/>
        <textarea id="texto" rows="40" cols="100">AQUÍ IRÍA EL TEXTO EN EL CUAL BUSCARÍA LAS PALABRAS</textarea>  
</form> 
Esta parte del código lo tengo habilitado simplemente para comprobar que parte del texto estoy seleccionado:

Código HTML:
<span id="resultado"></span> 

Antes de nada decir que de Javascript se poco, muy poco.

He intentado lo siguiente:

Código:
var lista = new Array(<?php echo $lista;?>);
			
for(i=0;i<lista.length;i++)
{

if(lista.toUpperCase()==origen.toUpperCase())
alert("EXISTE")

}
Pero no consigo nada, no sé si lo que quiero hacer se puede hacer de esta manera.

Un saludo y gracias.
  #2 (permalink)  
Antiguo 14/06/2012, 05:54
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Seleccionar texto y comparar

estás comparando un string con una palabra. usa indexOf()
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 14/06/2012, 10:39
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Seleccionar texto y comparar

He usado indexOf() de la siguiente forma:

Código:
for(i=0; i<lista.length;i++)
{	

t = lista[i].indexOf(origen)
				
if(t == '0')
      $("#mostrar").html("Existe - " + origen + " - " + lista[i]);
else
      $("#mostrar").html("No Existe - " + origen + " - " + lista[i]);

			
}
El problema que tengo es que lista[i] no avanza, es decir, compara el valor de origen con el ultimo valor del array, sin recorrer los demás valores.
  #4 (permalink)  
Antiguo 14/06/2012, 12:31
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Seleccionar texto y comparar

getSelection() no se comporta igual en todos los navegadores, tendrías que hacerlo así

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <title>selección de texto</title>
  5. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
  6. <script type="text/javascript">
  7. textoSeleccionado = function(){
  8. var t = '';
  9. if(window.getSelection){
  10. t = window.getSelection();
  11. }else if(document.getSelection){
  12. t = document.getSelection();
  13. }else if(document.selection){
  14. t = document.selection.createRange().text;
  15. }
  16. return t;
  17. }
  18.            
  19. mouseup = function(){
  20. var tsel = textoSeleccionado();
  21. if(tsel!=''){
  22. alert("Texto Seleccionado:\n"+tsel);
  23.  
  24. /// Buscar coincidencia
  25. var items = new Array("ingredere", "constanter", "civitas");
  26. for (var i = 0; i < items.length; i++) {
  27.  var item = items[i];
  28. // alert(item);
  29. var coincidencia = new RegExp(item,"i");
  30. var existe= coincidencia.test(tsel);
  31. if(existe == true){
  32. alert(items[i] + ' está en el texto seleccionado');
  33. }
  34.  
  35. }
  36.  
  37.  
  38. }
  39. }
  40.        
  41. $(document).ready(function(){
  42. $(document).bind("mouseup",mouseup);
  43. });
  44.                        
  45. </head>
  46. <p>
  47. Lorem ipsum dolor sit amet, re ingredere tempore percussus ait. Scola veniamus est amet amet constanter approximavit te.
  48. Maria non ait regem Boreas ingreditur ipse a civitas ex sic ut sua etiam quantitas non coepit.
  49. </p>
  50. </body>
  51. </html>

Lo que está medio confuso es tu enunciado
Cita:
Quiero que al seleccionar alguna parte de texto, aparezca un alert que me indique si esa palabra ó palabras existen o no en el array.
yo lo interpreto, si alguna o algunas palabras de la lista está en el texto seleccionado, te mande un alert

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 14/06/2012, 13:03
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Seleccionar texto y comparar

vamos, que sólo se trataba de leer un poco
Cita:
if(origen.indexOf(lista[i]) == -1)
$("#mostrar").html("No Existe - " + origen + " - " + lista[i]);
else
$("#mostrar").html("Existe - " + origen + " - " + lista[i]);
Cita:
Iniciado por ivankmx Ver Mensaje
El problema que tengo es que lista[i] no avanza, es decir, compara el valor de origen con el ultimo valor del array, sin recorrer los demás valores.
es que no estás concatenando, supongo. de jquery estoy pez
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 15/06/2012, 11:19
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Seleccionar texto y comparar

Gracias a todos por las respuestas, al final lo he conseguido haciendo lo siguiente:

Código:
<script type="text/javascript">

$(document).ready(function(){

        $("#texto").select(function(){          
                origen = new String;
		origen = document.getSelection();
			
				
			var lista = new Array(<?php echo $lista;?>);
			
			for(var i=0; i<lista.length;i++)
			{	
				
				concepto = lista[i].toLowerCase();
								
				if(origen==concepto)
					{
						$("#mostrar").html("Existe - " + origen + " - " + lista[i]);
						i = 100000;
					}
				else
						$("#mostrar").html("No Existe - " + origen + " - " + lista[i]);
			
					
			

	
			}
			
			
					
        });     
});     


</script>
Un pequeño problema que tengo ahora es que no puedo transformar origen a minúsculas (para que así al comparar funcione correctamente).

Si hago:

origen = origen.toLowerCase();

Deja de funcionar, supongo que será por incompatibilidad de la función toLowerCase() con el tipo de variable declarada... me extraña porque es un string.

¿Sugerencias?
  #7 (permalink)  
Antiguo 16/06/2012, 05:42
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Seleccionar texto y comparar

qué se supone que has conseguido??

si ls sub-cadena seleccionada es "hola mundo" y los elementos de la matriz son "hola, mundo", al compararlo con el operador (==) retornará false. puesto que está comparando
Cita:
hola mundo == hola // false
hola mundo == mundo // false
por lo que has de usar indexOf()

el objeto String acepta el método toLowerCase(), el problema es como estás usando el objeto
Cita:
origen = new String(document.getSelection());
origenmin = origen.toLowerCase()
aunque no creo que haga falta nada de esto porque supongo que getSelection() retorna un string

Cita:
i = 100000;
sustituye eso por break;
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #8 (permalink)  
Antiguo 25/06/2012, 02:25
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Seleccionar texto y comparar

Cita:
Iniciado por IsaBelM Ver Mensaje
qué se supone que has conseguido??
Pues lo que he conseguido es que me compare el texto seleccionado con mi lista de elementos del array, si por ejemplo en el texto seleccionas "Menorca" devuelve existe. No me ha hecho falta usar el indexOf para buscar el texto seleccionado en el array de elementos.


Cita:
Iniciado por IsaBelM Ver Mensaje
el objeto String acepta el método toLowerCase(), el problema es como estás usando el objeto
Perfecto, ya lo tengo solucionado.


Cita:
Iniciado por IsaBelM Ver Mensaje
sustituye eso por break;
Hecho.
  #9 (permalink)  
Antiguo 25/06/2012, 05:39
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Seleccionar texto y comparar

quizás no me expresé bien.

pongamos por caso que tu array es "blanco, rojo, azul, negro" y tu cadena es "tengo un coche rojo, pero me gusta montar en mi moto azul en verano"

ahora, el usuario selecciona el substring "moto azul", esta comparación
Cita:
if(origen==concepto)
retorna false

si quieres que retorne true, has de usar indexOf()
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: funcion, html, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:14.