Newsgroup: it.comp.lang.javascript
Titolo: manipolare stringhe miste a codice html

ciao a tutti,
non so se e' possibile farlo ma ho questo genere di necessita':
una tabella contiene dati estratti da un db in mysql (con php).
c'e' la possibilita' che dentro a uno o piu' campi ci sia testo misto a 
codice html.
vorrei fare in modo che nella <td> della tabella compaia il testo 
"ripulito" da ogni genere di tag html.
questo lo faccio con php, usando "strip_tags(bla bla)".
bene.
ora vorrei fare in modo che, usando lo script js di Riccardo (parlo 
dello script del messaggio "testo tipo baloons"), mi appaia dentro al 
<div> il testo completo di (eventuale) codice html.
in sostanza il risultato desiderato dovrebbe essere quello di avere una 
sorta di "anteprima rudimentale" stampata a vide nella <td> e per vedere 
come invece effettivamente e' formattato il testo in questione usare lo 
script js del baloon.
non so se sono stato chiaro.
salutini
sp-

ora che ci penso:
potrei scrivere dentro <td>..</td> il codice ripulito con php 
striptags() e scrivere il codice integro da passare alla funzione baloon 
per essere visualizzato (scrivendolo cioe' dentro un ('...') da passare 
alla funzione baloon, ad es.
solamente che cosi' mi si duplicano i testi e la pagina si appesantisce 
non poco.
piu' che altro perche' non so in partenza quanto saranno lunghi i testi 
e quanti campi di questo genere ci saranno ed in piu' si tratta di 
visualizzare, che so, anche 50 records a pagina.
dunque per ogni campo avrei un testo "pulito" e uno completo, 
moltiplicato n campi per record, moltiplicato per n record per pagina, 
viene una roba mostruosa.
:-/
pensavo a una soluzione analoga di striptags ma in js, in modo da 
passare tutto il codice completo a una funzione che stampa a video il 
codice "pseudo-pulito", e dentro la <td> inserire qualcosa del tipo:
onmouseover=baloon(this.innerHTML)
sto vaneggiando?
;)
sp-

 <div> il testo completo di (eventuale) codice html.
Ma se tu hai ripulito il testo dal codice HTML, nel TD non ve n'e' rimasta
piu' traccia. Quindi come pensi di poterlo ripristinare? Sarebbe come dire:
Io ho questo codice in partenza:
Ciao <em>pippo</em>
Lato PHP lo ripulisco e lo scrivo dentro il TD:
<td>Ciao pippo</td>
Ora, lato client gli arriva solo questo.
Mi spieghi come fa il browser, Javascript, o chi per lui a sapere che "un
tempo" pippo era enfatizzato? Da cosa lo capisce?
Se il discorso fosse stato inverso, ovvero a SCHERMO avere il codice
effettivo, e nel baloon quello "ripulito", non ci sarebbero stati problemi,
perche' in quel caso non avevi perdita di informazioni.
Come puoi ben vedere, puoi operare sulla base di due strade.
O duplichi il codice, o fai in modo che il contenuto del TD non subisca
perdite di informazioni.
Sulla duplicazione del codice non mi dilungo. Sai gia' come fare e quali
sono gli eventuali svantaggi.
Sull'evitare che il TD perda informazioni, hai due strade.
La prima e' abbastanza semplice. Lato PHP invece di eliminare i tag, li
sostituisci con dei commenti:
Ciao <em>pippo</em>, come <u>stai</u>?
diventa:
Ciao <!-- em -->pippo<!-- /em -->, come <!-- u -->stai<!-- /u -->?
Scrivi questo nel TD, e quando devi visualizzare il baloon recuperi la
stringa HTML e sostituisci nuovamente i commenti con i caratteri
appropriati.
Come vedi, hai il vantaggio di non duplicare il codice in senso lato, ma
cmq ne aumenti la lunghezza.
L'altra soluzione e' invece la seguente. Usa i CSS.
Definisci una classe, sul TD o sulla tabella specifica, dipende dalla
struttura del tuo codice:
<style type="text/css">
	td.plain-text,td.plain-text *{
		font : normal normal 11px monospace;
		text-decoration:none;
		display:inline;
	}
</style>
(Ovviamente se vuoi aggiungere altri parametri fai pure, questa classe e'
puramente indicativa e dimostrativa)
e poi inserisci il codice nudo e crudo nel TD:
<td class="plain-text">
	Ciao <em>pippo</em>, come <u>stai</u>?
</td>
Sembra funzionare tutto, ma c'e' almeno un "eccezione" da considerare:
<td class="plain-text">
	Ciao <em>pippo</em>, come <u>stai</u>?<br>Io bene, e tu?
</td>
Facilmente risolvibile aggiungendo:
td.plain-text br{display:none;}
Ovviamente l'adozione di questa tecnica dipende dal tipo di codice HTML che
potrebbe essere inserito, e se il browser supporta o meno i CSS, ma ho
escluso che ci fossero iframe o quant'altro per via del fatto che vuoi
visualizzare il codice in un "baloon".. In ogni caso, se dovesse capitarti
qualche tag di questo genere, basterebbe adottare la stessa tecnica del tag
BR.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 BR.
umh... certo.
che tu sappia quali altre "eccezioni" potrebbero esserci?
grazie mille.
sp-

 che tu sappia quali altre "eccezioni" potrebbero esserci?
Te ne ho elencate qualcuna poco sopra, poi fai un po' di test.


 Intendevo nel codice inserito nel TD.
ah no no, nessun iframe
salu'
sp-