Newsgroup: it.comp.lang.javascript
Titolo: Non va...

Nella mia immenza ignoranza l'avevo fatta semplice, ma non funziona (su IE 
si, ovviamente funziona, ma il test su IE mi aiuta solo a capire il grado di 
errore: se funziona su IE ho sbagliato, se non funziona nemmeno su IE allora 
ho scritto veramente una cazzata)
La sostanza e':
TD (ai CSS ci devo ancora passare) con onMouseOver="CellaOn(this, '1');"
La funzione CellaOn dovrebbe cambiare l'immagine di sfondo della cella 
attuale [this], di quella prima e di quella dopo:
function CellaOn(x, ID)
{
 x.previousSibling.style.backgroundImage = 'url(' + imgOn_l.src + ')';
 x.style.backgroundImage = 'url(' + imgOn_c.src + ')';
 x.nextSibling.style.backgroundImage = 'url(' + imgOn_r.src + ')';
}
Il problema e' che su IE  x.previousSibling ha un'attributo style. Su 
Firefox no.
Ho anche dato un'occhiata con il DOM inspector di FireFox, e mi dice che il 
previoussibling di this e' un nodo, ma di tipo 3 e che in effetti non ha un 
attributo style...
Cosa mi sono perso?

 ha scritto nel messaggio 
news:aT04g.98899$A83.2...@twister1.libero.it...
[cut]
Come non detto, ho trovato il problema ma mi sembra un po' strana come 
cosa...
Allora...
C'e' un <TD>.
Com'e' che il  previousSibling del TD non e' il TD precedente, ma il 
contenuto del TD stesso?
E che il TD che mi precedente in realta' sia il 
previousSibling.previousSibling?
Sopratutto, come ne vengo fuori visto che invece su IE il  previousSibling 
di un TD e' il TD prima?
Ok, IE potra' essere cesso quanto vogliamo, ma in effetti a me in una 
tabella viene piu' logico pensare che la gerarchia sia tra TD e TR, e poi 
dentro ad un TD ci siano i contenuti. Non che i testi facciano parte della 
struttura della tabella...o perlomeno, a livello gerarchico, che cavolo ci 
fanno i contenuti allo stesso livello dei contenitori??? O_o

 contenuto del TD stesso?
spazi vuoti tra le 2 dichiarazioni di td?
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 previousSibling.previousSibling?
No, non credo sia così. Come ti suggerisce Cristiano, se lasci degli spazi
vuoti (o tabulazioni, o caratteri di newline) tra il tag di chiusura e
quello di apertura successivo, FireFox interpreterà tali caratteri come un
nodo di testo.
-- 
Nando [?]
Apostolo della Prova

 nodo di testo.
Ecco, a questo punto pero' mando a quel paese la compatibilita' con FireFox 
(e anche altri browser, eventualmente).
Cioe', mi state dicendo che il web consortium ha inserito tra le specifiche 
dell' HTML che i programmatori lo devono scrivere tutto attaccato senza 
indentare od organizzare il codice?
Com'e' sta cosa che per inserire uno spazio fuori dai paragrafi c'e' bisogno 
di un nbsp; e invece quando inserisco degli spazi FireFox li identifica come 
nodi delle pagine?
(si, il tono della risposta e' polemico, ma sinceramente su questa cosa mi 
sono cadute le braccia...non riesco proprio a capire come sia possibile 
qualcosa del genere...) 

 indentare od organizzare il codice?
Anch'io trovo questa peculiarità un po' noiosa. Non sono un esperto e non
so dirti dove sia la logica, da dove provenga e se sia più "giusto" il
comportamento di Firefox o di Explorer. Ma tant'è, e bisogna farci i conti.
Se non si vuole scrivere il markup "tutto attaccato", comunque, esiste di
certo qualche soluzione via javascript per trovare il nodo giusto. Ad
esempio, volendo trovare il fratello precedente dello stesso tipo, mi viene
in mente una cosa simile (fatta proprio al volo):
function getPreviousSibling(oElement) {
  var sNodeName=oElement.nodeName;
  var el=oElement;
  while (el=el.previousSibling)
    if (el.nodeName==sNodeName) return el;
  return null;


   while (el=el.previousSibling)
E' capitato anche a me di scriverlo più di una volta, ma è formalmente più
corretto aggiungere un paio di parentesi. Soprattutto, NN6 non s'incavola
(anche se in verità di NN6 me ne frego abbastanza, ma non mi piace quando i
browser s'impuntano dando errori su del codice. Possono non considerarlo,
ma non andare in errore).
-- 
"Non è una guerra.. è uno sterminio.. loro stanno a noi come 
uomini contro i  vermi.. draghi contro i lupi.. 
O uomini che cavalcano draghi e lanciano lupi addosso ai vermi!"

 sono cadute le braccia...
Basta fare un respiro, contare fino a dieci, e cercare di vedere la cosa
sotto un'ottica più oggettiva, invece che quella dettata dalla "caduta di
braccia" del momento. :) Capita spesso anche a me, anche se con IE. E
sfortunatamente, spesso con IE si tratta di bachi dove non c'è un granché
di logica dietro. A quel punto dopo il respiro e la conta, la calma serve
più che altro ad accettare la cosa, e cercare una soluzione con lucidità.


 ci metto un a capo, anch'esso è un nodo di testo.
Ecco, qui ti fermo.
<TD>qualcosa</TD>
abcde
<TD>ancora qualcosa</TD>
Il testo abcde e' un errore. Non puo' esserci del testo li' ed il browser lo 
deve ignorare e/o segnalare come errore. Infatti sia IE che FireFox lo 
visualizzano fuori dalla tabella.
Ora, qualcuno deve spiegarmi allora perche' se tra il </TD> ed il <TD> c'e' 
un testo alfanumerico Firefox lo piazza fuori dalla tabella sia visivamente 
che nel DOM, mentre se tra il </TD> ed il <TD> ci sono degli spazi FireFox 
li piazza (nel DOM) all'interno della tabella in nodi Text che non possono 
esistere in quella posizione!
Pagina 
http://www.fireback.it/demo/a.htm
FireFox mette giustamente la sequenza di a fuori dalla tabella, sia nel DOM 
che a video.
Poi mette tutta l'indentatura del codice (quindi solo spazi, e per di piu' 
in posti ovviamente errati) un po' ovunque dentro alla struttura della 
tabella.
Questo, per me, e' estremamente illogico.

 corretto aggiungere un paio di parentesi. Soprattutto, NN6 non s'incavola
Oh, grazie anche per questa dritta.


 Questo, per me, e' estremamente illogico.
Non c'è assolutamente niente di illogico, Dr. Spock. :) Spero che adesso
sia più chiaro.


 sia piů chiaro.
La riformulo, anche se a volte ho la sensazione che tu risponda tanto per 
partito preso.
Nella pagina 
http://www.fireback.it/demo/a.htm
C'e' del testo tra un TD ed un'altro.
In piu' ci sono degli spazi bianchi di indentazione.
E' una mia impressione o e' estremamente stupido, illogico, oltre ognimodo 
fuori di testa e sicuramente un bug assurdo il fatto che, se c'e' del testo 
tra un TD ed un altro questo viene messo -nel DOM- fuori dalla struttura 
della tabella, mentre se ci sono degli spazi vengono messi dentro?

 della tabella, mentre se ci sono degli spazi vengono messi dentro?
Ho già risposto *esattamente* a questa tua domanda nel post precedente.
Dato che riscriverei precisamente quel che ho già scritto, dimmi cosa non
ti è chiaro della mia risposta (perché evidentemente al contrario di ciò
che credevo non sono stato sufficientemente chiaro), e cercherò di
spiegarmi meglio, se posso.
Quindi direi che si, è una tua impressione che si tratti di qualcosa di
estremamente stupido, illogico e via dicendo.
Poi, anche una volta che ti è chiara la logica che ci sta dietro, potrai
sempre dire che non la condividi nessuno te lo impedisce.


 diverse").
Si, in effetti non ci capiamo o abbiamo due modi diversi di ragionare.
Diciamo che mi consola l'aver constatato sul sito di FF e sui vari forum, 
ng, etc che e' "una feature", ovvero un bug che i programmatori di FF hanno 
detto pubblicamente di non saper risolvere e che quindi diventa una scelta 
di design.
Interessante notare che c'e' una miriade di gente che lo segnala da prima 
del 2001, gia' con le vecchie versioni di NN, affermando "se non lo 
sistemiamo ora ce lo ritroviamo tra i piedi per sempre", ed in effetti la 
gente se ne lamenta in continuazione anche ora :-D
Ho anche trovato una pagina "semi-ufficiale" che comprende tutta una serie 
di funzioni di helper da usare al posto di nextsibling, previoussibling, 
etc. per girare intorno al problema. Ovviamente non ci penso nemmeno, faro' 
probabilmente in modo che il sito non sia visibile da FF. Oppure lo lascio 
com'e', tanto e' solo un problema di menu' che non si illuminano, cazzate.

 com'e', tanto e' solo un problema di menu' che non si illuminano, cazzate.
Tra le due, direi che è sicuramente preferibile questa, di opzione.
-- 
"E' un vero peccato che tutte le persone che sanno come far funzionare 
il Paese siano troppo occupate a guidare taxi o a tagliare capelli."
(George Burns)

 box model)
Come volevasi dimostrare, č accaduta esattamente la stessa cosa anche in
questo caso. :)
http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration
"element-content-whitespace"
    true
        [required] (default)
        Keep all whitespaces in the document.
    false
        [optional]
        Discard all Text nodes that contain whitespaces in element content
(..)


 box model)
Come volevasi dimostrare, è accaduta esattamente la stessa cosa anche in
questo caso. :)
http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration
"element-content-whitespace"
    true
        [required] (default)
        Keep all whitespaces in the document.
    false
        [optional]
        Discard all Text nodes that contain whitespaces in element content
(..)
-- 
