Newsgroup: it.comp.lang.javascript
Titolo: Aiuto, sostituzione stringhe collegate

Ciao,
Ho questa necessità:
Ho la variabile stringa testoPulito che contiene un testo e dei tag
html.
Devo ottenere lo stesso testo ma trasformare i tag del tipo:
<span style="font-size:10px">
...
</span>
in:
<font size="7">
...
</font>
il problema è che ci possono essere anche altri span style non
necessariamente legati alla dimensione dei font quindi bisogna capire
se lo span di chiusura è relativo ad uno di questi e modificarlo in </
font> oppure no.
Inoltre bisogna tenere conto dei font annidati.
Ho provato a fare questo:
iniziare a trovare l'ultimo </span>
poi andare a ritroso e cercare in base agli altri </span> incontrati
lo span di apertura collegato
(in pratica dallo <span> di partenza per ogni altro </span> incontrato
incremento un contatore e poi quando si azzera arrivo allo span di
apertura giusto)
spero di essermi spiegato bene, il problema è che non ci sono
riuscito, non trovo una funzione in javascript che mi faccia una
ricerca a ritroso di una stringa da una determinata posizione.
Potete provare a risolvere questo problema o a darmi uno spunto?
Grazie infinite

 Inoltre bisogna tenere conto dei font annidati.
cioé puoi avere <span style="font-size:10px">...<span/>...<span/></span> ?
gran pacco allora ... non ho tempo di studiarci adesso, 2 dritte:
a) conosci RegExp? qua una introduzione:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Regular_Expressions
   e qua per esempi (catturare tag html, ma temo non funzioni con tag
annidati):
 
http://www.regular-expressions.info/examples.html
b) usare split per suddividere per "span" e poi giocare con l'array
ottenuto:
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:String:split
Domanda: come mai vuoi togliere lo style e sostituirlo con font
(ultradeprecato)?
Non fai prima a spostare la dimensione nel css e sostituire lo style con
class ?
-- 
"Affacciati affacciati benedici, guardaci
 guardaci...guardaci!
 Tanto sono quasi duemila anni che stai a guardare!"
									    E.B.


La variabile stringa testoPulito come la ottieni? Se si tratta di un
elemento con un id allora potresti pensare all'uso combinato delle
funzioni seguenti:
getElementById, lastChild, getElementsByTagName. Controlli lo style
con una condizione e quindi applichi removeAttribute e poi
setAttribute.
Un bel lavoretto non c'è che dire.
Ciao
Oreste

 Inoltre bisogna tenere conto dei font annidati.
    ...skipped!
Prova questa regexp:
<html><head>
<script type="text/javascript">
var strHtml = '<div><span style="font-size:10px">bla bla bla</span>\n<span style="font-size:10px">bla bla bla</span></div>\n<div><span style="font-size:10px">bla bla bla</span><span style="font-size:10px">bla bla bla</span></div>';
alert(strHtml);
alert(strHtml.replace(/<span style="font-size:10px">([^<\/span>]+)/g,'<font size="7px">$1').replace(/<\/span>/g,'</font>'));
</script>
</head><body></body></html>
-- 
    * b *
  *   y   *
*   Piero   *
[ /do ut des/ ] 

 alert(strHtml.replace(/<span style="font-size:10px">([^<\/span>]+)/g,'<font size="7px">$1').replace(/<\/span>/g,'</font>'));
uhm ... il [^ funziona sul singolo carattere, non sulla stringa.
-- 
"La realtà è un'illusione causata dall'assenza di alcool."
									      A.

 eh ... il problema è che ha span annidati
Annidati come? Mi faresti un esempio?
    ...skipped!
-- 
    * b *
  *   y   *
*   Piero   *
[ /carpe diem/ ] 

 Annidati come? Mi faresti un esempio?
<span style="font-size:10px">bla bla <span>eh eh <span> oh oh
</span></span></span>


 </span></span></span>
Ok, credevo che gli span annidati dovessero avere anche
style="font-size:10px", tuttavia qualcosa si può fare: :-)
var strHtml = '<div><span style="font-size:10px">bla bla bla</span>\n<span style="font-size:10px"><span style="font-size:10px">bla bla bla</span></span></div>\n<div><span style="font-size:10px"><span style="font-size:10px">aaa</span><span style="font-size:10px">bbb</span></span><span style="font-size:10px">bla bla <span>eh eh <span> oh oh </span></span></span></div>';
alert(strHtml);
alert(strHtml.replace(/<span style="font-size:10px">([^<\/span>]+)*/g,'<font size="7px">$1').replace(/<span>/g,'<font>').replace(/<\/span>/g,'</font>'));
Resta inteso che uno "<span>pippo</span>" *non annidato* viene comunque
matchato. Io non sono riuscito ad isolarlo. :-/
-- 
    * b *
  *   y   *
*   Piero   *
[ /cogito ergo sum/ ] 

 matchato. Io non sono riuscito ad isolarlo. :-/
eh, grazie ... :-) il problema sta (anche) lě
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 eh, grazie ... :-) il problema sta (anche) lě
Infatti, ma l'OP non sembrava richiedere questo.
Bel problema: come discriminare tag identici, fra annidati e non. :-?
-- 
    * b *
  *   y   *
*   Piero   *
[ /ad audiendum verbum/ ] 

 Infatti, ma l'OP non sembrava richiedere questo.
ah ok, forse allora sto capendo male io cosa vuole l'OP?
-- 
"e mai che mi sia venuto in mente
 di essere piů ubriaco di voi
 di essere molto piů ubriaco di voi"
									  F.D.A.

 ah ok, forse allora sto capendo male io cosa vuole l'OP?
No, forse sono io ad interpretare cosě la richiesta dell'OP. :-?
Vediamo se ce lo chiarisce. ^_^
-- 
    * b *
  *   y   *
*   Piero   *
[ /summum ius summa iniuria/ ]