Problemas con JavaScript

Dhampir
01 de Marzo del 2005
Amigos todos tengo las siguientes funciones:
function cambiaEstilo(clase){
var tds = document.body.getElementsByTagName("td");
var spans = document.body.getElementsByTagName("span");
var z;

for (var i=0;i<tds.length;i++){
var nombre = tds[i].id;
var j = nombre.indexOf("td_");

if (clase == nombre && j == 0){
if (tds[i].className == "blocksm1"){
tds[i].className = "blocksm2";
}
for (var x=0;x<spans.length;x++){
if (spans[x].className==nombre){
spans[x].className = "menupasivo";
}
}
}
}
for (var i=0;i<tds.length;i++){
var nombre = tds[i].id;
var j = nombre.indexOf("td_");

if (clase == nombre && j == 0){
if (tds[i].className=="blocksm2"){
alert("Td :" + tds[i].id);
}
}
}


}

function verificaEstilo(clase){
var tds = document.body.getElementsByTagName("td");
var spans = document.body.getElementsByTagName("span");

for (var i=0;i<tds.length;i++){
var nombre = tds[i].id;
var j = nombre.indexOf("td_");
if (j == 0){
if (tds[i].className=="blocksm2"){
tds[i].className="blocksm1";
for (var j=0;j<spans.length;j++){

var nombre_span = spans[j].className;
var x = nombre_span.indexOf("td_");
if (spans[j].className=="menupasivo" && x == 0){
spans[j].className = "menu";
}
}
}


}
}
cambiaEstilo(clase);
}


Estas funciones debiesen de permitir cambiar el esilo de los td que pertencen a un menu, pero no se porque extrania razon lo esta haciendo por favor necesito de su ayuda

De antemano muchas gracias

Lobito
01 de Marzo del 2005
Hola Dhampir,

¿ por qué usas document.BODY.GetElementsByTagName... ?
El elemento DOM-Model "BODY" no tiene ninguna función, solamente propiedades. GetElementsByTagName es función del elemento " DOCUMENT".

Elimina la extensión BODY de tu código y veras. Además te recomendo la página web http://www.w3.org/TR/2002/PR-DOM-Level-2-HTML-20021108/html.html#ID-71555259


Saludos

Lobito

Dhampir
01 de Marzo del 2005
Gracias por tu ayuda esta super buena la pagina... pero en realidad me equivoque al colocar mal el ultimo mensaje, la funcion no me esta permitiendo cambiar el estilo de los tds y de los spans, alo mejor me debo estar cayendo en algo super facil pero como soy un novato en esto, no puedo encontrar cual sera el error si por favor alguien que vea lo sabe plis le agradecira su ayuda.

Lobito
01 de Marzo del 2005
Hola Dhampir,

bueno, sin conocer tu código completo no se puede descubrir las faltas, pero al menos te cuento lo que me llama la atención en tu código.

Hay declaraciones de siempre las mismas variables ¿ Por qué ? Además REDECLARAS tus variables "nombre" y "j" en tus bucles de FOR/NEXT en cada iteración! ¿ Por qué te llenas tu memoria tanto ?

Yo declaría tus variables "tds" y "spans" una sola vez fuera de cada función, públicas entonces, porque reflejan el estado de tu documento, no cambian nunca, las necesitas a cada rato, y por fin, porque tu programa sería más rápido.

En tu función "cambiaEstilo" usas las variables "nombre", "j", "i" más de una vez, entonces estas variables yo declaría a los principios de esa función (como la variable "z" que nunca usaste). Es cierto que puedes declarar la variable de control de un bucle como "for (var i = 0;..." pero ya que necesitas la "i" varias veces...

Luego sería mejor quitar todo que te complica tu programa para probar, si puedes cambiar el estilo de TODOS <td>. Si eso funciona en Firefox, puedes añadir poco a poco todas las cosas complicadas que te confunden en este momento.

A propósito Firefox: Conoces el debugger que tiene este browser ? Usalo, es bueno y facilita la vida de programadores bastante.

Saludos

Lobito