Newsgroup: it.comp.lang.javascript
Titolo: sostituire testo nel div

<div id="att">
	Test in corso...
</div>
 
Sto lavorando...
 
<script type="text/javascript">
	document.getElementById("att").innerText = "Test completato";
</script>
 
Come si � capito, dopo che la pagina � stata caricata, al posto di "Test 
in corso..." dovrebbe apparire "Test completato".
Perch� non funge?


Ho avuto tempo fa lo stesso problema, poi scoprii che che alcuni browser 
funzionava e con altri no.
Utilizzando jquery il problema non si pone.
$('#att').html('XYZ'); // metto 'XYZ' come innerHTML di javascript puro
 

$('#att').html('XYZ'); // metto 'XYZ' come innerHTML di javascript puro
 
Una curiosit� (ho iniziato da poco ad usare JQ):
Se JQ � un framework scritto in JS, perch� alcune cose che sono in JS non
funzionano su alcuni browser e invece, come dici tu, "con JQ il problema non 
si pone"?
 
 
-- 
ciao!
 
...nixs.................................................................
nixs.lucchetto.@lagirandola.it
 
togli la ".SERRATURA." per scrivermi
........................................................................
L'uomo non smette di giocare perch� invecchia,
ma invecchia perch� smette di giocare.
(George Bernard Shaw)
 

 $('#att').html('XYZ'); // metto 'XYZ' come innerHTML di javascript puro
 
non ho capito molto
 
<div id="att">
     Test in corso...
</div>
 
Sto lavorando...
 
<script type="text/javascript">
     $('#att').html('XYZ'); // metto 'XYZ' come innerHTML di javascript puro
 
</script>
 
ho provato come sopra, ma non funziona


 
Del codice scritto in javascript sembra funzionare in alcuni browser ed 
in altri no.
Molte volte sono piccoli particolare che ne determinano il funzionamento 
o meno. Questi sono dovuti al modo di interpretare il codice javascript 
da parte dei vari browser.
Fino a non molto tempo addietro doveve assere necessario "leggere" il 
tipo di browser dell'utente e mandare in esecuzione del javascript 
diverso a seconda del browser.
Con jquery il problema � in gran pare risolto.
Leonardo
 

 ho provato come sopra, ma non funziona
 
Hai fatto qualche errore, quello che segue è è il codice completo, e 
testato di una pagina html
Copia/incolla per intero sostituendo il codice.
In alternativa incolla tutto nel blocco note e salva con estensione html 
(ad esempio sul desktop), poi facci doppio click sopra
Leonardo
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
 
<script src="
http://code.jquery.com/jquery-1.4.4.js
"></script>
 
<style>
#myDiv{border:1px solid #FF0000;
	left:10px;
	top:10px;
	width:150px;
	height:100px;
}
</style>
 
</head>
 
<body>
 
<script>
   $(document).ready(function () {
$('#myDiv').html('Visto che finziona?'); // metto come innerHTML
 
});
</script>
 
 
 
<div id="myDiv"></div>
 
</body>
</html>

 alcuni browser e invece, come dici tu, "con JQ il problema non si pone"?
 
Perché jquery usa una sua funzione proprietaria (questo "html" di cui si 
parla), che internamente immagino userà innerHTML (che tra l'altro non è 
proprio la stessa cosa di innerText, in presenza di tag).
 
Tutto ciò che fai con jquery puoi farlo con javascript, ovviamente, per 
il motivo che dici tu: è fatto con javascript ...

il motivo che dici tu: è fatto con javascript ...
 
Ah ecco! E' questo che intendevo, allora alla domanda "perchè alcune cose JS 
non funzionano
con tutti i browser mentre JQ funziona sempre?", si dovrebbe rispondere:
"js non funziona sempre su tutti i browser se si usano istruzioni di UN 
browser particolare,
mentre JQ usa metodi e funzioni JS standard.
Ho capito bene?
 
 
-- 
ciao!
 
...nixs.................................................................
nixs.lucchetto.@lagirandola.it
 
togli la ".SERRATURA." per scrivermi
........................................................................
L'uomo non smette di giocare perché invecchia,
ma invecchia perché smette di giocare.
(George Bernard Shaw) 
 

 mentre JQ usa metodi e funzioni JS standard. Ho capito bene?
 
Sì, jquery non fa altro che usare, per funzioni che i browser supportano 
in modo diverso, il metodo corretto per il browser corretto. Poi fa anche 
altro, ovviamente, tipo come dicevo fornire dei metodi per fare 
animazioni scrivendo poche righe di codice.
 
Nota bene che jquery *NON* funziona su tutti i browser ... non ricordo a 
memoria la compatibilità IE, ma mi sembra che abbiano per esempio escluso 
IE6.Quindi se il tuo cliente vuole compatibilità IE6 non puoi usare jquery 
(ma puoi fare tutto più o meno tranquillamente con javascript).

 non è comunque standard, ma è attualmente supportato da tutti i browser)
 
bene, naturalmente invece del 'div' potrei usare un 'p' (paragrafo), e 
mi sembra che funzioni ugualmente.
 
Però qui mi sorge la seguente domanda:
 
siccome la maggior parte degli esempi che ho visto in rete, per 
modificare i contenuti dinamicamente, usano sempre i 'div', non è che 
per caso l'uso del 'p' non è supportato ufficialmente da tutti i browser?

 (ad esempio sul desktop), poi facci doppio click sopra
 
mamma mia, per fare un'operazione piuttosto semplice serve addirittura 
il fw.
E vabè ;)


Ti ho mandato al pagina completa per farti capire meglio, certo che si 
può fare con molte meno righe.
Leonardo
 


IE6 è supportato.
 
 
(preso da 
http://docs.jquery.com/Browser_Compatibility
)
 
jQuery actively supports these browsers:
 
    Firefox Current - 1 version
    Internet Explorer 6+
    Safari Current - 1 version
    Opera Current - 1 version
    Chrome Current - 1 version 
 
Any problem with them should be considered and reported as a bug in 
jQuery.
 
There are known problems with:
 
    Mozilla Firefox 1.0.x
    Internet Explorer 1.0-5.x
    Safari 1.0-2.0.1
    Opera 1.0-9.x
    Konqueror 
 
jQuery generally works with Konqueror and Firefox 1.0.x, but there may be 
some unexpected bugs since we do not test them as regularly. 
 
 
-- 
By ZeD

 browser?
 
No. E` tutto indipendente dal tag. Puoi anche inventarti un tag <pippo> e 
usare quello (ricordandoti di crearlo su Explorer tramite createElement() 
altrimenti i css non lo riconscono).
 
Bye.
 

 Perchè non funge?
 
Bisognerebbe capire cosa intendi per "non funge". Non appare il nuovo
testo? Oppure appare il nuovo testo direttamente?
 
Verifica sempre cosa dice la console degli errori, magari l'elemento non
viene trovato quando il codice viene eseguito. Inoltre `innerText` non è
supportato da tutti i browser (fu introdotto da Microsoft su IE). Ti
consiglio qualcosa di più standard:
 
    <script>
        var att = document.getElementById("att");
        var text = "Test Completato";
 
        if ("textContent" in att)
            att.textContent = text;
        else if ("innerText" in att)
            att.innerText = text;
    </script>
 
O di più largamente adottato:
 
    <script>
        var attr = document.getElementById("att");
        var text = "Test Completato";
 
        att.innerHTML = text;
    </script>
 

 Bye.
 
bene

 non si pone"?
 
Il discorso va fatto su più livelli, ovvero DOM e JS.
 
Nel primo caso non si parla di JavaScript. Ad esempio, il fatto che
`innerText` "funzioni" su IE ma non su Firefox non è per via di una
mancanza di JavaScript, ma delle differenti DOM API che i browser
implementano.
Per fare una semplificazione, tutto il codice che scrivi che riguarda
nodi HTML, o window, o document... Non è JavaScript.
 
Quello che fa jQuery perlopiù è sopperire alle differenze che ci sono
tra i vari browser su come essi gestiscono il proprio DOM. Quindi, di
JavaScript in senso stretto, non si parla.
 
Un esempio concreto può essere fatto proprio con la casistica in
questione. Se si vuole cambiare il testo di un nodo HTML (DOM), bisogna
confrontarci con le varie differenze tra browser. Questo a meno che non
si astragga con una funzione che prende in carico tali differenze, ad
esempio:
 
    function text(node, value) {
        if ("textContent" in node)
            node.textContent = value;
        else if ("innerText" in node)
            node.innerText = value;
        else
            throw new Error("text() Not supported")
    }
 
A questo punto in tutti i codici che andrai a scrivere non dovrai
preoccuparti ogni volta di gestire tali differenze, ti basterà usare la
tua funzione `text`, quindi il tuo codice rimarrà consistente:
 
    var att = document.getElementById("att")
 
    text(att, "Hello");
 
Quello che fa jQuery è esattamente lo stesso. Ma ripeto, in questo caso
– e nella stragrande maggioranza – si parla di DOM non di JavaScript.
 
Quando non si fa riferimento a nessun elemento HTML, o window, o altro,
allora è probabile che si tratti di JavaScript. Anche in questo caso ci
possono essere differenze, perché ogni browser può implementare una
versione diversa di JS, oppure una sua particolare "perversione", tipo
JScript di Microsoft.
 
Un esempio? Nei browser che supportano le specifiche ECMAScript 5, è
possibile usare il metodo `bind` sulle funzioni, oppure il metodo
`Object.create` (ce ne sono moltissimi altri). Non tutti i browser li
supportano, però, e in quel caso vanno creati degli shim (o polyfill).
Quando possibile essi vengono menzionati nella documentazione di
Mozilla, ad esempio:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind
 
 
Per riassumere, quindi, quando si dice "usando X il problema non si
pone" spesso s'intende che la libreria "X" si prende in carico una serie
di problematiche a livello crossbrowser per conto tuo. Ovviamente anche
usando "JS" invece di "X" il problema non si porrebbe, la differenza è
che le suddette problematiche te le devi risolvere a manina tu.
 
Detto questo, non credo che nel caso specifico l'uso di jQuery rispetto
a "vanilla JavaScript" (ovvero JavaScript puro) sia risolutivo, non vedo
come il metodo `html` abbia, in tal caso, vantaggi sul corrispettivo
`innerHTML`. A memoria le uniche aggiunte di jQuery erano principalmente
per la gestione di memory leak più che di "tempistiche", e se queste
modifiche in qualche caso hanno un impatto (ne rendono più lenta
l'esecuzione, in caso di diversi nodi), è un effetto collaterale non
considerato e non si dovrebbe basare il proprio codice su di esso.


 
infatti per il momento ho risolto sostituendo innerText con innerHTML

 Non ci vuole molto per rendersi conto da soli!!!
 
Per rendersi conto di cosa? Come ho detto, nel tuo caso non è chiaro
cosa volessi, né tanto meno quale risultato invece ottenevi. Dal conto
mio, c'erano due possibili spiegazioni, come ho detto: a) Il nuovo testo
appariva direttamente b) Il nuovo testo non appariva affatto.
 
Le due spiegazioni potevano differire in base al browser usato, che non
hai reso noto nel post iniziale, o al fatto che il codice scritto fosse
"pseudo codice" e non effettivamente quello usato.
 
Come spesso diciamo nel NG, "Non funziona" vuol dire poco o nulla: si
hanno sempre dei risultati, magari non sono quelli che uno si aspetta.

versione diversa di JS, oppure una sua particolare "perversione"
 
questa è mitica, me la scrivo :-)))))
 
 
 
-- 
ciao!
 
...nixs.................................................................
nixs.lucchetto.@lagirandola.it
 
togli la ".SERRATURA." per scrivermi
........................................................................
L'uomo non smette di giocare perché invecchia,
ma invecchia perché smette di giocare.
(George Bernard Shaw) 
 

 hanno sempre dei risultati, magari non sono quelli che uno si aspetta.
 
si si ;)

On 21/05/2012 13:53, ZER0 wrote:
 > Assolutamente no: un codice del genere:
 >
 >      <div id="att">
 >          Foo
 >      </div>
 >
 >      <script>
 >          document.getEelementById("att").innerHTML = "Bar";
 >      </script>
 >
 > Visualizzerà direttamente "Bar". Dato che nel post che hai pubblicato
 > non c'erano commenti nel tuo codice, non era chiaro se era solo uno
 > pseudo codice che avevi scritto o se era esattamente sequenziale. Se è
 > sequenziale, come quello dell'esempio sopracitato, "Foo" non verrà
 > visualizzato.
 
ma sei sicuro?
 
       <div id="att">
           Foo
       </div>
 
     "Fase di lavorazione"
 
       <script>
           document.getEelementById("att").innerHTML = "Bar";
       </script>
 
mettiamo che la "Fase di lavorazione" duri circa 10 secondi, in questo 
tempo cosa verrebbe visualizzato?
 
 
 >> Poi se c'è qualche browser che interpreta il tutto in modo poco
 >> convenzionale, vabè...
 >
 > Non è affatto "poco convenzionale", è decisamente "come deve
 > funzionare", o se preferisci, "convenzionale".
 >
 > Se ci sono browser che si comportano diversamente, allora quelli sono
 > "poco convenzionali", come dici te.
 >
 
????
e io cosa ho detto???
???
 
 >> Ad ogni modo, "blocco note" a portata di mano, copia&  incolla, salva in
 >> html, click sul file.
 >> Non ci vuole molto per rendersi conto da soli!!!
 >
 > Per rendersi conto di cosa? Come ho detto, nel tuo caso non è chiaro
 
che la seconda scritta che dovrebbe sostituire la prima non appare 
(naturalmente leggendo i vari suggerimenti adesso ho risolto)
 
 > cosa volessi, né tanto meno quale risultato invece ottenevi. Dal conto
 > mio, c'erano due possibili spiegazioni, come ho detto: a) Il nuovo testo
 > appariva direttamente b) Il nuovo testo non appariva affatto.
 >
 > Le due spiegazioni potevano differire in base al browser usato, che non
 > hai reso noto nel post iniziale, o al fatto che il codice scritto fosse
 > "pseudo codice" e non effettivamente quello usato.
 
vabè, adesso funziona tutto, non vale la pena continuare a "filosofeggiare"
 
 > Come spesso diciamo nel NG, "Non funziona" vuol dire poco o nulla: si
 > hanno sempre dei risultati, magari non sono quelli che uno si aspetta.
 
si si
 

 vabè, adesso funziona tutto, non vale la pena continuare a "filosofeggiare"
 
Non mi sembra si stia parlando di "filosofia", quanto di questioni
abbastanza concrete. Ricorda che questo è un NG pubblico, tutte le
conversazioni possono essere utili a tutti quelli che hanno avuto
problematiche similari, o che le avranno.

 problematiche similari, o che le avranno.
 
beh uso i ng da circa 15 anni, e questa cosa già la sapevo, non è una 
novità.
Si vabè, hai voglia di scrivere, ma io ho anche altre cose "concrete" da 
fare, quindi torno alle mie attività

 novità.
 
Non ho detto che non la sapevi, ho semplicemente voluto ricordare tale
cosa. Se chiunque pensa che un certo argomento sia vago o poco chiaro –
il primo indicatore è appunto trovarsi di fronte un "non funziona" –
vale la pena chiarirlo sempre.

 IE6 è supportato.
 
Sì, era un esempio, riporta il discorso a IE5.5, o l'ultima per Mac (che 
ahimé purtroppo alcuni malati usano ancora)
 

 vale la pena chiarirlo sempre.
 
buona notte!!!

 buona notte!!!
 
Buona notte a te.

On 21/05/2012 22:07, ZER0 wrote:

ROTFLino che tipi, e vabè :-b


E con questa apro il concorso:
 
Avete tempo fino al 31 marzo 2013 per far incazzare ZER0.
 
Il primo che riuscira` a fargli scrivere un insulto o anche solo un 
"allora arrangiati" (o un commento dello stesso livello, ma deve essere 
piccato) prima della scadenza, ricevera` da me una medaglia (di cartone) 
e un attestato di merito al prossimo JSDay (meta` maggio 2013)
 
Bye.

 ROTFLino che tipi, e vabè :-b
 
Onestamente non vedo il senso di questo post. Mi sembrava che la
discussione fosse conclusa! Se vuoi continuare, temo che questo NG non
sia il posto più adatto.

 e un attestato di merito al prossimo JSDay (meta` maggio 2013)
 
Vale anche se mi faccio auto-incazzare? :) Se al posto della medaglia di
cartone ci metti uno Spritz, ci potrei fare un pensierino (l'attestato
di merito lo voglio).

 di merito lo voglio).
 
Allora niente medaglia di cartone, ma uno spritz per l'eroe vincitore e 
uno per te. :D
 
Bye.
 


Ma tu guarda questo!
 
Vuole cambiare regolamento e posta in palio in un concorso che lo riguarda.
 
Per uno Spritz poi?
 
Quale sarà il prossimo passo? Crearsi un alter ego fittizio per fare 
"self trolling"?
 
Che mondo.
 
Quanta pazienza ci vuole.

 Quanta pazienza ci vuole.
 
:)

 uno per te. :D
 
Ottimo :D
 
 

 sia il posto più adatto.
 
si si chiudiamola

 si si chiudiamola
 
Grazie. :)