2010-06-26 25 views
5

Escribí un código que modifica las imágenes en una página web. Funciona con Firefox y safari. Pero tratar de hacer que funcione con Internet Explorer me ha dejado perplejo. ¿Cuál es el equivalente de "parentNode" en el explorador? ¿O cómo se puede engañar para que funcione?Equivalente a "parentNode" en Internet Explorer

images = document.getElementsByTagName('img') 
parms = {}; 

for (a=0;a < images.length;a++){ 
    parent = images[a].parentNode; // <-- What to substitute for explorer? 
    parms[a] = {}; 
    parms[a].bigsrc=parent.getAttribute("href"); 
    parms[a].w_o = images[a].width; 
    parms[a].h_o = images[a].height; 
    parms[a].IsBig = false; 
    parms[a].loaded = false; 
    images[a].border=0; 
    parent.setAttribute("href","javascript:MakeBig('"+a+"')"); 
} 
+2

Solo algunos comentarios generales: use 'var' para declarar' images', 'parms',' a' y 'parent' localmente; no use 'setAttribute' para establecer' href', use 'parent.href' en su lugar (IE se asusta); es probable que desee que 'parms' sea una matriz (en lugar de un objeto general):' var parms = []; '; es probable que desee establecer 'images [a] .style.border =" none "' en lugar del atributo 'border', que es [obsoleto] (http://dev.w3.org/html5/markup/img.html # img.attrs.border). –

+0

¿Podría proporcionar algo de HTML para que podamos reproducir el problema? –

+0

Un ejemplo del código (funciona en Firefox pero no en IE) está aquí: http://woodgears.ca/workshop/jacques/min.html Es un efecto de acercamiento de la imagen genial, si pudiera hacerlo funcionar con explorer (u opera, para el caso) –

Respuesta

12

El problema está en la asignación del parentNode a una var llamada "parent". Esto parece ser una palabra reservada en IE que rompe el código. Cambia el nombre de var y debería funcionar.

+1

Gracias. Eso lo solucionó Si solo IE me hubiera dado un mensaje de error útil a tal efecto. –

+7

'parent' es ** no ** una palabra reservada. Si hubiera usado 'var parent = images [a] .parentNode;' hubiera estado bien. 'parent' es un objeto host que proporciona una referencia al cuadro principal del objeto de ventana y aparentemente (y legalmente) no se puede establecer en IE, y' parent = images [a] .parentNode; 'intenta establecerlo. –

+0

¡Ahh esto me ahorró muchas molestias, gracias! Creo que la respuesta debe ser editada para reflejar que no es una palabra reservada, sin embargo, sigue siendo la respuesta correcta desde mi punto de vista. – LeonardChallis

0

¿Está esperando que parentNode sea un ancla? Parece que estás intentando envolver la imagen en un enlace. Si eso es correcto, lo que podría funcionar como alternativa es agregar un clic a la imagen y establecer un cursor de mano. Eso podría crear la apariencia de que la imagen es un enlace sin que tengas que importar qué es parentNode.

+0

No estoy seguro de lo que quiere decir con "ancla". Solo trato de cambiar el enlace que se señala cuando se hace clic en la imagen. –

+0

Anchor es la etiqueta utilizada para crear un enlace; por eso, cuando está creando un enlace en HTML, la etiqueta es 'a'. Entonces, en lugar de tratar de usar Javascript para modificar la etiqueta de anclaje que rodea la imagen, ¿por qué no modificar el onclick de la imagen? De nuevo, eso le permitirá evitar tener que importar qué es parentNode –

2

parentNode funciona bien en IE (excepto en certain cases, muy probablemente irrelevante aquí). El error es casi seguro en otro lugar en su código.

+0

Excepto que el explorador falla en la declaración "parentNode", por lo que el resto del código ni siquiera se ejecuta. –

+1

A riesgo de repetirme, ** 'parentNode' es compatible y funciona correctamente en IE **. El problema está en otra parte. Si proporciona algo de HTML, podemos decirle dónde. –

+0

Tim tiene razón en que el problema está en otra parte. Vea mi última respuesta para donde creo que es. –