2012-05-10 101 views
0

我有以下的javascript(调整大小在Blogspot的博客图片):Image.width的ie浏览器

var imageTags = document.getElementsByTagName('img'); 
    for(i = 0 ; i < imageTags.length; i++){ 
    if(imageTags[i].src.indexOf('/s400/', 0)>-1) { 
     if(imageTags[i].style.width=='400px' || imageTags[i].width==400) { 
     imageTags[i].style.width='556px'; 
     imageTags[i].style.height='368px'; 
     } else { 
     imageTags[i].style.width='368px'; 
     imageTags[i].style.height='556px'; 
     } 
     imageTags[i].src=imageTags[i].src.replace('/s400/', '/s556/'); 

    } 
    } 

它完美的作品在Firefox和Chrome,但在IE浏览器(测试IE9)似乎总是进入第二个分支,好像imageTags[i].width==400总是被评估为false。我如何修复IE浏览器?

编辑: 建议我暂时添加一个警报来显示图像的宽度,在IE9上它是...... 416.它看起来像IE添加了从HTML宽度的边距。

+2

请,请,请...为imageTags [i]创建一个变量。它只是增加了代码的混乱,使其理解/解析/读取/维护变得稍微困难​​。 –

+0

在else块中,你能输出从'imageTags [i] .style.width'返回的宽度吗?好奇IE 9正在计算它在... –

+0

@ZackMacomber,请参阅编辑。 – Grzenio

回答

0

尝试imageTags[i].offsetWidth==400代替imageTags[i].width==400
我建议,因为.WIDTH propertie只得到在标签中定义的width,而.offsetWidth得到真正的宽度

+0

从来没有听说过图像的innerWidth。我认为这是一个jQuery元素方法... – mplungjan

+0

对不起,正确的是offsetWidth而不是innerWidth。我的错 –

0

请运行该告诉你得到了什么 - 你目前和调整然后加载一个新的图像

var imageTags = document.getElementsByTagName('img'); 
for(var i=0,n=imageTags.length,img,src,w,h,newImg; i<n; i++) { 
    img = imageTags[i]; 
    src = img.src; 
    if(src.indexOf('/s400/', 0)==-1) continue; 
    alert(img.width); 
    if(img.width==400) { 
    w=556; 
    h=368; 
    } else { 
    w=368; 
    h=556; 
    } 
    newImg = document.createElement("img"); 
    newImg.onload=function() { this.width=w; this.height=h} 
    newImg.src=src.replace('/s400/', '/s556/') 
    img.parentNode.replaceChild(newImg,img); 
} 
0

建议我检查了什么是由IE报告的宽度,它是416而不是400(可能利润增加?)。所以我只是添加了一个明显的黑客来检查400和416.