Cuando he publicado el topic no estaba muy inspirado...
Después de un rato en plena inspiración he encontrado un modo bastante decente de llevar a cabo mi función:
Para ello, primero he cambiado las variables del objeto:
Código Javascript
:
Ver originalvar miObjeto = function(){
/*aquí variables que ya habían*/
this.stackI5 = new Array();
this.stackJ = new Array();
this.stackI5I = 0;
this.stackJI = 0;
}
Fialmente, emulamos un "stack", tal que:
Código Javascript
:
Ver originalthis.add=function(fields,e,space,deep){
this.stackI5I++;
this.stackJI++;
this.stackI5[this.stackI5I] = 0;
this.stackJ5[this.stackJI] = 0;
for(this.stackI5[this.stackI5I]=0;this.stackI5[this.stackI5I]<fields.length;this.stackI5[this.stackI5I]++){
for(this.stackJ5[this.stackJI]=0;this.stackJ5[this.stackJI]<e.length;this.stackJ5[this.stackJI]++){
if(e.item(this.stackJ5[this.stackJI]).nodeName==fields[this.stackI5[this.stackI5I]]){
if(deep){
this._add(e.item(this.stackJ5[this.stackJI]).firstChild, space+":"+fields[this.stackI5[this.stackI5I]]);
}else{
this._add(e.item(this.stackJ5[this.stackJI]), space+":"+fields[this.stackI5[this.stackI5I]]);
}
break;
}
}
}
this.stackI5[this.stackI5I] = 0;
this.stackJ5[this.stackJI] = 0;
this.stackI5I--;
this.stackJI--;
};
De aquí a destacar:
* El código antiguo simplemente sustituye "i5" por "this.stackI5[this.stackI5I", y "j" por "this.stackJ[this.stackJI]".
* El separar el incremento y decremento de los índices en separado es para evitar warnings en el JS-Lint
* El devolver los contadores a 0 antes de decrementar es para evitar que se acumule "basura" (para que no guarde valores distintos a 0 cuando acabe el bucle).
Dejo esto aquí como referencia a quién le pudiese servir.
Un saludo.