![]() | |
![]() |
| | Thread Tools | Display Modes |
#11
| |||||||||
| |||||||||
|
|
On Fri, 14 Dec 2007 07:46:24 -0800 (PST), zachille wrote: Devo essere sincero, non ho ben capito il tuo problema. O meglio, prima parti con un certo tipo di problematica, e poi ti dirigi in tutt'altra direzione... Analizzando il documento posso apportare delle modifiche al template utilizzando DOM. No, fermo. Sei già andato troppo avanti. Analizziamo passo passo la questione. |
|
Bene. Ma questo se ho capito bene (altrimenti correggimi), è quello che ti restituisce la chiama XMLHttpRequest. Ovvero una stringa, come dici qui (a meno che tu non ti stia invece riferendo ad altro): La richiesta ritorna una stringa e non un DOM document object. |
|
Di conseguenza presumo che la risposta alla chiamata XHR, ovvero la suddetta stringa, tu la recuperi dalla proprietà "responseText" del tuo oggetto XMLHttpRequest (e non da "responseXML" per intenderci). Fin qui è tutto corretto? |
|
Per ricevere un oggetto DOM corrispondente al documento parsato dovrei convertire l'html o un frammento di esso in XML. |
|
Più che in XML, in HTML, se poi la tua intenzione è "appenderlo" al documento HTML corrente. |
|
E qui subentra la seconda domanda e chiarimento: La richiesta XHR chi la fa? Una pagina HTML, presumo. Pagina che tu puoi modificare (cosa che non puoi fare al template, se ho inteso). |
|
Questa pagina HTML cosa ci deve fare, poi, del "template" una volta che l'hai ottenuto? A parte modificare la width o altro, fai conto di averlo già fatto, cos'è che deve farci alla fin fine? |
|
Ti ricordo comunque, dato che di stringhe stiamo parlando, che puoi sempre usare le regexp. Ecco, non mi è ben chiaro come siamo passati da questo: Quindi una funzione che sfrutti getElementsByName, e agisca magari sull'attributo width della tablella "pluto" tralasciando il resto. A questo: Sono daccordo che si possa adeguare il template tramite DOM ma, per farlo, dovrei innestare lo script nella pagina prima che questa venga visualizzata. XSLT potrebbe essere una soluzione ma in rete non ho trovato molto. Appunto. Appunto.. cosa? Il passaggio non è chiaro. Stai dicendo due cosedifferenti tra loro. Inoltre abbiamo appurato che ciò che hai tu è una stringa (anche se aspetto un'ulteriore conferma). Quindi così com'è non puoi usare né le DOM API, né l'XSLT. Convertire un frammento del DOM Tu non hai un frammento del DOM. Tu hai una stringa. Al più devi prima convertire la stringa in frammento del DOM. da HTML a documento XML. Ma una volta che hai l'HTML, perché vorresti convertirlo in XML? Se poi devi aggiungere quell'HTML da qualche parte nel documento, deve appunto essere HTML. |
|
La funzione importNode e' usata per clonare dei nodi e processarli tramite XSLT. Eh, stai tutt'ora andando troppo oltre. Torna indietro. Vanno prima chiariti i passaggi precedenti. Praticamente vorrei applicare le modifiche al template prima che la richiesta XHR venga soddisfatta. Detta così, è una frase non solo concettualmente errata, ma anche temporalmente errata. ![]() Come puoi applicare le modifiche a qualcosa che ancora non hai? Non so'. Andiamo passo passo. E' quello che sto cercando di fare. ![]() Penso di non riuscire a dare un quadro generale. Dobbiamo riuscirci, invece. Cerca di rispondere alle domande che ti ho fatto, mi aiuterebbe non poco. Se il contesto non e' chiaro spero abbiate la pazienza di "aiutarmi a spiegarmi"... Vai tranquillo, siam qui. Un ultima cosa: su quale/i browser deve girare il tutto? |
#12
| |||
| |||
|
|
a name="sessions"> </a><br / table class="aws_border" border="0" cellpadding="2" cellspacing="0" width="100%" tr><td class="aws_title" width="70%">Visits duration </td><td class="aws_blank"> </td></tr tr><td colspan="2" table class="aws_data" border="1" cellpadding="2" cellspacing="0" width="100%" tr bgcolor="#ECECEC"><th>Number of visits: 27 - Average: 1268 s</ th><th bgcolor="#8888DD" width="80">Number of visits</th><th bgcolor="#8888DD" width="80">Percent</th></tr tr><td class="aws">0s-30s</td><td>3</td><td>11.1 %</td></tr tr><td class="aws">30s-2mn</td><td>2</td><td>7.4 %</td></tr tr><td class="aws">2mn-5mn</td><td>5</td><td>18.5 %</td></tr tr><td class="aws">5mn-15mn</td><td>7</td><td>25.9 %</td></tr tr><td class="aws">15mn-30mn</td><td>2</td><td>7.4 %</td></tr tr><td class="aws">30mn-1h</td><td>3</td><td>11.1 %</td></tr tr><td class="aws">1h+</td><td>5</td><td>18.5 %</td></tr /table></td></tr></table><br / Ammesso che il documento sia "effettivamente" un documento, e non una stringa (dato che lo recuperi tramite XHR). In tal caso, devi usare le regexp (oppure, creare dalla stringa dei nodi effettivi, agganciando il tutto al document tree). |
#13
| |||
| |||
|
|
Restituendo una stringa con "responseText" ho la possibilita' di modificare cio' che voglio con le regexp. Sapreste suggerirmi un espressione regex che faccia match con il report sopra. Cioè io vorrei riconoscere il tag <a> con attributo name="sessions" e, semplicemente, eliminare tutto fino all'ultima /table> compreso il <br/> finale. Questo e' possibile? |
#14
| ||||||
| ||||||
|
|
Per ricevere un oggetto DOM corrispondente al documento parsato dovrei convertire l'html o un frammento di esso in XML. Scusa se sono insistente. Se convertissi una parte del documento HTML in XML potrei ottenere un oggetto DOM tramite "responseXML". |
|
Più che in XML, in HTML, se poi la tua intenzione è "appenderlo" al documento HTML corrente. A seguito di una trasformazione XSLT otterrei comunque un'HTML. |
|
E qui subentra la seconda domanda e chiarimento: La richiesta XHR chi la fa? Una pagina HTML, presumo. Pagina che tu puoi modificare (cosa che non puoi fare al template, se ho inteso). Si. Per completezza: [..] var req = newXMLHttpRequest(); var el = document.getElementById(args[2]); el.innerHTML = req.responseText; In sintesi. Hai inteso bene. |
|
A me interessa solo adeguare il template al layout del mio sito. Quindi, a scopo puramente stilistico, voglio ottenere che alcune tabelle non "sbordino" dal margine destro del div che ha una larghezza definita. |
|
Ma una volta che hai l'HTML, perché vorresti convertirlo in XML? Se poi devi aggiungere quell'HTML da qualche parte nel documento, deve appunto essere HTML. L'idea di convertire l'HTML in XML si basava sull'approccio di poter effettuare trasformazioni XSLT durante la richiesta XHR. |
|
Vai tranquillo, siam qui. Un ultima cosa: su quale/i browser deve girare il tutto? IE 6, 7 e FF. |
#15
| ||||
| ||||
|
|
Si, ma forse qui c'è un punto che non ti è chiaro. Un documento XML non è un documento HTML. Anche il DOM e le DOM API sono differenti, sebbene simili. Quindi anche se tu ottenessi un documento XML ("oggetto DOM" non ha senso chiamarlo) tramite responseXML non potresti appenderlo al tuo documento HTML direttamente. Dovresti trasformarlo in una stringa e poi in HTML. Come vedi faresti una serie di passaggi inutili. |
|
Si, ma è un "rimbalzo" inutile, è questo che sto cercando di dirti. Se tu avessi già un documento XML e un template XSLT, indubbiamente il discorso sarebbe diverso. Ma in questo caso lo stai intruducendo te, aumentandone la complessità del sistema, per risolvere qualcosa che puoi benissimo risolvere in altri modi, più semplici. |
|
Okay. Quindi tu vuoi modificare il responseText che stai assegnando a "el.innerHTML". Perfetto. Puoi farlo anche qui. Ovvero: var el = document.getElementById(args[2]); el.innerHTML = req.responseText; /* accedi e modifica elementi appena aggiunti al document tree */ var a = document.getElementsByTagName("sessions")[0], tbl; if ( a != null ){ tbl = a.nextSibling; while ( tbl!=null && tbl.tagName != "TABLE") tbl = tbl.nextSibling; if ( tbl ) tbl.style.width = "200px"; } |
|
Anche "durante" è fuorviante come termine: "durante", vorrebbe dire mentre la chiamata è in corso. Ma tu puoi farlo sono quando è stata conclusa. Inoltre ribadisco che tale approccio, solo per cambiare la width di qualche tag, aggiunge solo complessità in più. Tra l'altro, se si tratta solo di modifiche stilistiche hai pensato ad usare unicamente i CSS? Magari tramite la keyword "!important". |
![]() |
| Thread Tools | |
| Display Modes | |
| |