Newsgroup: it.comp.lang.javascript
Titolo: onselect

Qualcuno gentilmente mi saprebbe spiegare come rilevare in IE 5 quando
l'utente seleziona delle parole nella pagina.
L'evento onselect viene generato dal primo oggetto selezionato mentre per
tutti gli altri nulla...
A me servirebbe invece riuscire a rilevare esattamente quali parole sono
state evidenziate...
Grazie a tutti.


wrote:

forse c'è qualcosa di piu' diretto ma prova questo, si avvia
al rilascio del mouse dopo aver selezionato.
<HTML>
<HEAD>
<TITLE>qualcosa cosi? </TITLE>
<SCRIPT FOR=document EVENT=onmouseup
LANGUAGE="JavaScript">if(document.all){prendiselezioneIE()}</script>
</HEAD>
<BODY>
<script>
if(document.layers){window.captureEvents( Event.MOUSEUP)}
var str=""
function prendiselezione(evnt){
if( document.getSelection().length>0)
{str+=document.getSelection()
alert(str)}}
function prendiselezioneIE()
{a=document.selection.createRange().text
if(a.length>0)
{if(str.indexOf(a)==-1)
str+=a;
alert(str)}}
if(document.all){document.onMouseUp=prendiselezioneIE}
if(document.layers){window.onMouseUp=prendiselezione}
</script>
prova a selezionare al rilascio del mouse </BODY>
</HTML>

 ha scritto nel messaggio
news:3b6c169e...@news.iunet.it...

Grazie mille, ma il mio problema va oltre la sola ricezione del testo
selezionato. Ho bisogno di sapere l'esatto oggetto che e' stato selezionato.
Il mio file html è composto da una serie di tag SPAN contenenti il testo
della pagina. Quando questo viene selezionato verrei saperie quali SPAN lo
sono e quali no...

sono e quali no...
se giri ancora per questi lidi e non sei invece presso
altri, magari romagnoli come in realta' ti auguro
(vedo adesso il nickname piuttosto impegnativo... )
Non ho trovato niente di comodo, ma quello che segue il
lavoro lo fa, ma se gli span contengono testo di notevole
dimensioni e sono molto numerosi temo  sia ben poco pratico,
comunque ... eccolo qui
per ie5+ e martellando (ma non su onselect che non mi
reagisce) adattabile anche per NS6 ma qui non lo metto
ancora
(attenzione alle righe che presumo verranno tagliate ma che
credo di avere segnalato)
attenzione anche alla distruzione dell' oggetto che tiene
memoria degli span evidenziati, non e' detto che
convenga(anzi e' certamente detto che non)  distruggerlo nel
momento che io per comodita' di visualizzazione ho
prescelto.
<HTML>
<HEAD>
<TITLE>qualcosa cosi? </TITLE>
<STYLE TYPE="text/css">
<!--
DIV {
font-family: Verdana;
color: #FF3300;
font-size: 8pt;
width: 100pt;
background: #CCFFFF;
 
}
// -->
</STYLE>
<script>
var qualispan=new Object()
function controllaqualispansonoselezionati()
{
/*su una riga*/
document.getElementById('pippo').innerText='nessun span
selezionato o
selezionato in modo incompleto'
/*fino a qui*/
a=document.selection.createRange().text
if (a.length>0)
{
for(i=0;i<document.getElementsByTagName('span').length;i++)
{b=document.getElementsByTagName('span')[i].innerText
if(a.indexOf(b)!=-1)
{/*su una riga*/
qualispan[document.getElementsByTagName('span')[i].id]=document.getElementsB
yTagName('span')[i].id}
/*fino a qui*/}
pippuz="hai selezionato (completamente)\n"
for(u in qualispan)
{
(pippuz+=qualispan[u].toString()+'\n')
delete qualispan[u]
document.getElementById('pippo').innerText=pippuz}
}
}
</script>
</HEAD>
<BODY onselect=controllaqualispansonoselezionati()>
<SPAN id='bubu'>primo span con id bubu </SPAN><BR>
<BR>
<BR>
<BR>
<BR>
<BR>
<SpAN id='pluto'>secondo span con id pluto</SPAN>
<BR>
<BR>
<BR>
<DIV id=pippo></DIV>
 </BODY>
</HTML>

 ha scritto nel messaggio
news:3b6ed0f6...@news.iunet.it...

Grazie mille cosi' penso di avere una traccia per lavorare... comunque il
codice che mi suggerisci ha bisogno di qualche messa a punto... se ho piu'
span con uguale testo il programma non e' in  grado di determinare quale di
questi e' selezionato...

c=a=document.selection.createRange()
questo non serve a un accidente mi era servito per farmi
dire con 
for (cosacaspitacontieni in c) {alert(cosacaspitacontieni)}
se c'era qualcosa in html e c'era...
cancellare senza pieta'

questi e' selezionato...
Giusto.
allora prova questo
solo per IE in quanto utilizza htmlText che mi risulta
essere codice proprietario  ms.
In pratica preleva non il semplice testo contenuto nella
selezione ma HTML ad esso relativo 
e' percio' in grado di vedere se esiste l tag span nella
selezione con relativo id ma non e' ingrado di dire se la
selezione e' completa o meno
a naso dovrebbe essere piu' veloce dell' altro confrontando
strighe limitate (anche se ha il difetto di creare oggetti)
<HTML>
<HEAD>
<TITLE>qualcosa cosi? </TITLE>
<STYLE TYPE="text/css">
<!--
DIV {
font-family: Verdana;
color: #FF3300;
font-size: 8pt;
width: 100pt;
background: #CCFFFF;
 
}
// -->
</STYLE>
<script>
var qualispan=new Object()
function controllaqualispansonoselezionati()
{
/*su una riga*/
document.getElementById('pippo').innerText='nessun
spanselezionato '
/*fino a qui*/
c=a=document.selection.createRange()
a=document.selection.createRange().htmlText
if (a.length>0)
{
for(i=0;i<document.getElementsByTagName('span').length;i++)
{b=document.getElementsByTagName('span')[i].id
if(a.indexOf(b)!=-1)
{/*su una riga*/
qualispan[document.getElementsByTagName('span')[i].id]=document.getElementsByTagName('span')[i].id}
/*fino a qui*/}
pippuz="hai selezionato (non so dire se completamente)\n"
for(u in qualispan)
{
(pippuz+=qualispan[u].toString()+'\n')
delete qualispan[u]
document.getElementById('pippo').innerText=pippuz}
}
}
</script>
</HEAD>
<BODY onselect=controllaqualispansonoselezionati()>
<SPAN id='bubu'>span</SPAN><BR>
<BR>
<BR>
<BR>
<BR>
<BR>
<SpAN id='pluto'>span</SPAN>




e ultima versione mi pare si riesca a dire
(con la solita limitazione di funzionare con il solo browser
IE5)
anche se la selezione riguardi la totalita' o meno dello
span
altra annotazione. comunque si sia scritto il tag
in minuscolo o maiuscolo nel codice,
<span> o <SPAN>, il browser li vede in
document.selection.createRange().htmlText come uppercase
[=maiuscolo] e la stringa stivata in 'selezionecompleta'
[vedi codice sotto] va quindi approntata con i tag in
maiuscolo 
spiegazione molto confusa, ma chi fosse interessato allo
script avra' modo di verificarlo e comprendere quanto ho
malamente detto
lo script e' stato specificato per il tag <span> come da
richiesta, ma funziona con qualunque tag contenitore con le
modifiche del caso
ulteriore annotazione:
viene operato un confronto tra stringhe: e' quindi
essenziale essere certi che gli spazi, virgolette relativi
agli id (nel mio script non ci sono) e quant'altro siano
esattamente quelli presenti nel codice (fatta eccezione per
il maiuscolo come detto)
Va bene va bene mi taccio 
qui sotto lo script
se qualcuno lo prova e mi dice se funziona avra' la mia
gratitudine
non sempiterna, ma quasi.
copia incollla e ripristina le righe spezzate dove segnalato
<HTML>
<HEAD>
<TITLE>Riconosce quali span sono selezionati, parzialmente o
totalmente</TITLE>
<STYLE TYPE="text/css">
<!--
DIV {
font-family: Verdana;
color: #FF3300;
font-size: 8pt;
width: 100pt;
background: #CCFFFF;
 
}
// -->
</STYLE>
<script>
var qualispan=new Object()
function controllaqualispansonoselezionati()
{
/*su una riga*/
document.getElementById('pippo').innerText='nessun span
selezionato '
/*fino a qui*/
a=document.selection.createRange().htmlText
if (a.length>0)
{
for(i=0;i<document.getElementsByTagName('span').length;i++)
{b=document.getElementsByTagName('span')[i].id
//alert(a+'\n'+selezionecompleta)
if(a.indexOf(b)!=-1)
{/*su una riga*/
qualispan[document.getElementsByTagName('span')[i].id]=document.getElementsByTagName('span')[i].id}
/*fino a qui*/}
pippuz="hai selezionato\n"
for(u in qualispan)
{
/*su una riga*/
selezionecompleta='<SPAN
id='+qualispan[u]+'>'+document.getElementById(qualispan[u]).innerText+'</SPAN>'
/*fino a qui*/
/*su una riga*/
comp=(a.indexOf(selezionecompleta)!=-1)?'totalmente
':'parzialmente'
/*fino a qui*/
pippuz+=qualispan[u]+' '+comp+'\n'
delete qualispan[u]
document.getElementById('pippo').innerText=pippuz}
}
}
</script>
</HEAD>
<BODY onselect=controllaqualispansonoselezionati()>
<span id=bubu>span</span><BR>
<BR>
<BR>
<BR>
<BR>
<BR>
<SPAN id=pluto>span</SPAN>
<BR>
<BR>
<SPAN id=barnaba>span</SPAN>


Grazie mille, cosi' funziona!

Grazie mille, cosi' funziona!
di nulla e' un modo per tenermi in funzione le meningi piu'
divertente dei rebus...
ps
nella versione che riconosce la completezza o meno della
selezione dello span
sostituisci 
selezionecompleta=document.getElementById(qualispan[u]).outerHTML
dove invece costruivo una stringa in modo misto
mi pare un pochino piu' elegante...
Ciao