2009.06 25

IE与Firefox在JavaScript上的7个不同句法

尽管那需要用长串的、沉闷的不同分支代码来应付不同浏览器的日子已经过去,偶尔还是有必要做一些简单的区分和目标检测来确保某块代码能在用户的机器上正常运行。在这篇文章中,作者介绍了7个在IE和Firefox中不同的JavaScript句法。

javascript ie firefox

1. CSS "float" 值

访问一个给定CSS 值的最基本句法是:object.style.property,使用驼峰写法来替换有连接符的值,例如,访问某个ID为"header"的<div>background-color值,我们使用如下句法:

document.getElementById("header").style.backgroundColor= "#ccc";

但由于"float"这个词是一个JavaScript保留字,因此我们不能用 object.style.float来访问,这里,我们可以在两种浏览器中这么做:

在IE中这样写:

document.getElementById("header").style.styleFloat = "left";

在Firefox中这样写:

document.getElementById("header").style.cssFloat = "left";

2. 元素的推算样式

JavaScript可以使用object.style.property句法,方便地在外部访问和修改某个CSS样式,但其限制是这些句法只能取出已设的行内样式或者直接由JavaScript设定的样式。并不能访问某个外部的样式表。为了访问元素的"推算"样式,我们可以使用下面的代码:

在IE中这样写:

var myObject = document.getElementById("header");
var myStyle = myObject.currentStyle.backgroundColor;

在Firefox中这样写:

var myObject = document.getElementById("header");
var myComputedStyle = document.defaultView.getComputedStyle(myObject, null);
var myStyle = myComputedStyle.backgroundColor;

3. 访问元素的"class"

像"float"一样,"class"是JavaScript的一个保留字,在这两个浏览器中我们使用如下句法来访问"class"。

在IE中这样写:

var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("className");

在Firefox中这样写:

var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("class");

This syntax would also apply using the setAttribute method.

4. 访问<label>标签中的"for"

就第3点中所提到的,我们同样需要使用不现的句法区分来访问<label>标签中的"for":

在IE中这样写:

var myObject = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("htmlFor");

在Firefox中这样写:

var = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("for");

5. 获取鼠标指针的位置

计算出鼠标指针的位置对你来说可能是非常少见的,不过当你需要的时候,在IE和Firefox中的句法是不同的。这里所写出的代码将是最最基本的,也可能是某个复杂事件处理中的某一个部分。但他们可以解释其中的异同点。同时,必须指出的是结果相对于Firefox,IE会有更在的不同,这种方法本身就是有BUG的。通常,这种不同可以用"拖动位置"来得到补偿,但,那是另外一个主题的文章了: ) !

在IE中这样写:

var myCursorPosition = [0, 0];
myCursorPosition[0] = event.clientX;
myCursorPosition[1] = event.clientY;

在Firefox中这样写:

var myCursorPosition = [0, 0];
myCursorPosition[0] = event.pageX;
myCursorPosition[1] = event.pageY;

6. 获取可见区域、窗口的大小

有时,我们会需要找到浏览器的可视位置的大小,通常我们称之为"可见区域"。

在IE中这样写:

var myBrowserSize = [0, 0];
myBrowserSize[0] = document.documentElement.clientWidth;
myBrowserSize[1] = document.documentElement.clientHeight;

在Firefox中这样写:

var myBrowserSize = [0, 0];
myBrowserSize[0] = window.innerWidth;
myBrowserSize[1] = window.innerHeight;

7. Alpha 透明

好吧,这并不是一个JavaScript句法问题,而是源自于CSS的Alpha透明。但当某个物体需要淡入/出则需要JavaScript来表现,这是通过访问CSS的Alpha透明设置来完成的,通常在一个循环中完成。你需要通过来修改的JavaScript的代码如下::

在IE中这样写:

#myElement { filter: alpha(opacity=50); }

在Firefox中这样写:

#myElement { opacity: 0.5; }

在IE中这样写:

var myObject = document.getElementById("myElement");
myObject.style.filter = "alpha(opacity=80)";

在Firefox中这样写:

var myObject = document.getElementById("myElement"); myObject.style.opacity = "0.5";

还有什么不同的吗?

这是作者(via: 7 JavaScript Differences Between Firefox & IE)个人根据自己的经验整理的,而sofish在JavaScript上依然是一个新手。如果还有更多的不同,欢迎大家提出来,分享出来,共同学习!

40

  1. 2009.06.25 4:47 pm
    keke(visit): [回复]

    坐了sf慢慢看。。。

  2. 2009.06.25 7:00 pm
    z.Yleo77(visit): [回复]

    好文,补充下未知的东西。。
    不过文章的题目有点大了,应该是在修改css,外观方面 ie与ff之间的差异。

  3. 2009.06.25 7:49 pm
    Showfom(visit): [回复]

    前排插入。。。深奥……

  4. 2009.06.25 11:06 pm
    tapevil(visit): [回复]

    我也是Javascript的菜鸟,共勉

  5. 2009.06.25 11:08 pm
    思念像一条鱼(visit): [回复]

    补充一下:
    firefox 也支持 clientX,clientY属性。和IE 一样,表示相对于浏览器窗口的位置。而 pageX属性则是相对于页面的位置。可见二者并不等价。
    在 IE 中,pageY相当于clientY + document.documentElement.scrollTop.

  6. 2009.06.26 8:44 am
    Deeka(visit): [回复]

    总结得挺好的,顶一个

  7. 2009.06.26 9:02 am
    唯美国度(visit): [回复]

    我也刚学JS,跟你学习啦!

  8. 2009.06.26 11:28 am
    leehow(visit): [回复]

    回京一踩…不懂…

  9. 2009.06.26 1:41 pm
    爱月(visit): [回复]

    收藏且学习

  10. 2009.06.27 12:56 pm
    精美图片(visit): [回复]

    感谢楼主,正好需要

  11. 2009.06.27 2:24 pm
    减肥瘦身(visit): [回复]

    很不错,收下了,不过这个有点深,看的不是很明白.

  12. 2009.06.28 4:08 am
    sougs(visit): [回复]

    楼主,我想换我的站的模板,换成CSS的。

  13. 2009.06.28 6:16 am
    jacksuc(visit): [回复]

    嗯。应该是只是在css方面的。并不是泛指的js

  14. 2009.06.28 5:50 pm
    yaugle(visit): [回复]

    非常不错的文章,学习了

  15. 2009.06.28 8:30 pm
    yaugle(visit): [回复]

    怎么回事?,哥们我给你留的言怎么没有显示?

  16. 2009.06.28 8:48 pm
    大学生创业网(visit): [回复]

    不错,又学习到不少东西。

  17. 2009.06.28 8:50 pm
    大学生创业网(visit): [回复]

    现在浏览器越来越做,考虑的问题也增加了

  18. 2009.06.28 9:01 pm
    蔷薇乐趣吧(visit): [回复]

    现在做个网站需要考虑很多方面

  19. 2009.06.29 7:55 pm
    girl(visit): [回复]

    来学习东西了

  20. 2009.06.30 8:33 am
    化妆技巧(visit): [回复]

    基本但必须了解的句法

  21. 2009.06.30 10:21 am
    WordPress啦(visit): [回复]

    很实用的教程

  22. 2009.06.30 2:11 pm
    股票(visit): [回复]

    感谢楼主,正好需要

  23. 2009.06.30 9:26 pm
    Fufu(visit): [回复]

    不错,很好的资料,收藏了。

  24. 2009.07.01 3:22 am
    tomchen1989(visit): [回复]

    访问class和for不用那么麻烦,myObject.className和myObject.htmlFor就可以了,也是Cross-browser的

  25. 2009.07.01 3:41 am
    tomchen1989(visit): [回复]

    而且.id、.className、.htmlFor等等都是可读写的。

  26. 2009.07.02 2:46 pm
    小毅(visit): [回复]

    JS小菜飘过啊。

  27. 2009.07.02 7:24 pm
    Nooidea(visit): [回复]

    我滴神阿

  28. 2009.07.08 5:53 pm
    bolo(visit): [回复]

    有点高深了,学习了

  29. 2009.07.12 1:36 pm
    ie8(visit): [回复]

    个人感觉还是比较容易区别

  30. 2009.07.28 10:01 pm
    掏宝(visit): [回复]

    要去西部,来重庆吧。空间是GODaddy的吗?速度还可以呢,我也想换换。

  31. 2009.08.03 1:46 pm
    54gh(visit): [回复]

    设计的好漂亮,楼主的设计功夫了得啊

  32. 2009.08.14 7:47 pm
    bolo(visit): [回复]

    学习一下,原来如此复杂呢

  33. 2009.08.30 1:25 pm
    kalahan(visit): [回复]

    还不错的博客··
    多交流哦

  34. 2009.09.17 6:05 pm
    萍乡(visit): [回复]

    不错的东西拿走了

  35. 2009.09.23 8:44 pm
    二手科学家(visit): [回复]

    与IE的斗争已经趋于和谐

  36. 2009.09.24 4:48 pm
    dswei(visit): [回复]

    我也要学习CSS啦,哈哈

  37. 2009.10.03 4:13 pm
    Giki(visit): [回复]

    你好,午安

  38. 2009.10.31 12:06 am
    anna(visit): [回复]

    真好有用,谢谢哈

  39. 2010.04.06 7:11 pm
    ℡末。小禾(visit): [回复]

    呵呵受教了

  40. 2010.06.18 11:04 am
    iphone lover(visit): [回复]

    不错.怪不得在ie下做的好好的东西.到firefox上都不能用了.原来是不一样的.谢谢分享.非常好!

Additional comments powered by BackType