Ciao a tutti come da titolo lavorando con le funzioni DOM di js mi sono imbattuto in qlkosa di mooolto strano :

Codice PHP:
<html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<
title>Untitled Document</title>
<
style type="text/css">
body{margin:0;padding:0}
</
style>


<
script type="text/javascript">

function 
test2()
{
    var 
test = new Test();
    
test.createTable();

}


var 
Test = function()
{

    var 
pannello document.getElementById("main_box");

    var 
pannello_interno document.createElement"div" );

    
pannello.appendChild(pannello_interno);
    
// forzo il ricaricamento del puntatore ... sotto IE NON VAAAAAAAAA !!!!!
    
pannello_internopannello.firstChild;


    
this.createTable = function(){ creaTabella(); }
    
    
    function 
creaTabella()
    {
        
/*Stampa riferimento di pannello_interno e del primo figlio*/
        
alert("(1) "+pannello_interno+"->"+pannello_interno.firstChild);
        
/*
            Stampa il riferimento del pannello contenitore
                -> del primo figlio
                ->-> e del secondo figlio se esiste il primo
                
            il primo figlio e' pannello_interno il secondo e' la tabella creata
        */
        
alert"(1.1) "+pannello+"->"+pannello.firstChild+"->->"+(pannello.firstChild pannello.firstChild.firstChild "null") );
    
        var 
table document.createElement"table" );
        
table.setAttribute("border" "1");        
        
        var 
tbody document.createElement"tbody" );
        var 
tr    null;
        var 
td    null;
        var 
tmp_val null;
        
        for(var 
i=i<10 i++ )
        {
            
tr document.createElement("tr");
            for(var 
j=j<10 j++ )
            {
                
tmp_val document.createTextNode"["+j+","+i+"]" );
                
td document.createElement("td");
                
td.appendChild(tmp_val);
                
                
tr.appendChildtd );
                
                
tmp_val null;
                
td null;
            }
            
            
tbody.appendChildtr );
            
            
tr null;
        }
        
        
table.appendChild(tbody)        
        
pannello_interno.appendChild(table);
        
pannello.appendChild(pannello_interno);
        
        
/*Stampa riferimento di pannello_interno e del primo figlio*/
        
alert("(2) "+pannello_interno+"->"+pannello_interno.firstChild);    
    }    
}

</script>





</head>

<body>


<table cellspacing="0" cellpadding="0" border="1" width="100%" height="100%">
<tr>
    <td>[url="javascript:test2()"]CARICAAAAAAAA[/url]</td>
</tr>
<tr>
    <td id="main_box"></td>
</tr>
</table>


</body>
</html> 
Copiate il testo in un file .html e provate ad eseguirlo.

Come prima cosa lo script dovrebbe creare un oggetto Test usato per creare un sottopannello in main_box. E dentro quel pannello dovrebbe metterci una tabella 10x10.
La cosa funziona ma ci sono dei problemi con i puntatori interni alla classe Test.

provatelo sotto FF3 e sotto IE Vederete che il puntatore a pannello interno assume valori diversi. Sotto firefox rimane il riferimento sotto IE NO!!!!!

Per ritornare al nodo che mi serve devo rinavigare tutto l'albero a partire da main_box.

Sinceramente non capisco perche', ho pensato fosse un problema di scoping delle variabili visto il casotto che ha fatto ecma nella fase di standardizzazione di sto linguaggio.

quello che mi lascia basito e' questa porzione di codice e quello che stampa fuori :

Codice PHP:

......

/*Stampa riferimento di pannello_interno e del primo figlio*/
        
alert("(1) "+pannello_interno+"->"+pannello_interno.firstChild);
        
/*
            Stampa il riferimento del pannello contenitore
                -> del primo figlio
                ->-> e del secondo figlio se esiste il primo
                
            il primo figlio e' pannello_interno il secondo e' la tabella creata
        */
        
alert"(1.1) "+pannello+"->"+pannello.firstChild+"->->"+(pannello.firstChild pannello.firstChild.firstChild "null") );

....... 
In teoria pannello_interno dovrebbe avere un figlio dopo la prima esecuzione del metodo.
Ma ie dice di no. Invece se riscorro l'albero dalla radice il nodo esiste eccome

Sinceramente nn capisco

e' come se

nodo1 = new Nodo();
nodo2 = new Nodo();
nodo3 = new Nodo();

nodo1.appendChild(nodo2);
nodo2.appendChild(nodo3);


Dovrebbe fare l'albero

nodo1->nodo2->nodo3

quindi se faccio
stampa(nodo2.firstChild )

dovrebbe stampare nodo3.

Ma invece non stampa nulla e mi tocca fare
stampa(nodo1->firstChild->firstChild )

Non so ...... pls help!!!!!