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

2009-08-04 13:59:54

尽管那需要用长串的、沉闷的不同分支代码来应付不同浏览器的日子已经过去,偶尔还是有必要做一些简单的区分和目标检测来确保某块代码能在用户的机器上正常运行。在这篇文章中,作者介绍了7个在IE和firefox中不同的JavaScript句法。 [img]http://www.aa25.cn/uploadfile/200907/5/D522259184.jpg[/img] [b]1. CSS &#34;float&#34; 值[/b] 访问一个给定CSS 值的最基本句法是:object.style.property,使用驼峰写法来替换有连接符的值,例如,访问某个ID为&#34;header&#34;的<div>的 background-color值,我们使用如下句法: document.getElementById(&#34;header&#34;).style.backgroundColor= &#34;#ccc&#34;; 但由于&#34;float&#34;这个词是一个JavaScript保留字,因此我们不能用 object.style.float来访问,这里,我们可以在两种浏览器中这么做: 在IE中这样写: document.getElementById(&#34;header&#34;).style.styleFloat = &#34;left&#34;; 在firefox中这样写: document.getElementById(&#34;header&#34;).style.cssFloat = &#34;left&#34;; [b]2. 元素的推算样式[/b] JavaScript可以使用object.style.property句法,方便地在外部访问和修改某个CSS样式,但其限制是这些句法只能取出已设的行内样式或者直接由JavaScript设定的样式。并不能访问某个外部的样式表。为了访问元素的&#34;推算&#34;样式,我们可以使用下面的代码: 在IE中这样写: var myObject = document.getElementById(&#34;header&#34;); var myStyle = myObject.currentStyle.backgroundColor; 在firefox中这样写: var myObject = document.getElementById(&#34;header&#34;); var myComputedStyle = document.defaultView.getComputedStyle(myObject, null); var myStyle = myComputedStyle.backgroundColor; [b]3. 访问元素的&#34;class&#34;[/b] 像&#34;float&#34;一样,&#34;class&#34;是JavaScript的一个保留字,在这两个浏览器中我们使用如下句法来访问&#34;class&#34;。 在IE中这样写: var myObject = document.getElementById(&#34;header&#34;); var myAttribute = myObject.getAttribute(&#34;className&#34;); 在firefox中这样写: var myObject = document.getElementById(&#34;header&#34;); var myAttribute = myObject.getAttribute(&#34;class&#34;); This syntax would also apply using the setAttribute method. [b]4. 访问<label>标签中的&#34;for&#34;[/b] 就第3点中所提到的,我们同样需要使用不现的句法区分来访问<label>标签中的&#34;for&#34;: 在IE中这样写: var myObject = document.getElementById(&#34;myLabel&#34;); var myAttribute = myObject.getAttribute(&#34;htmlFor&#34;); 在firefox中这样写: var = document.getElementById(&#34;myLabel&#34;); var myAttribute = myObject.getAttribute(&#34;for&#34;); [b]5. 获取鼠标指针的位置[/b] 计算出鼠标指针的位置对你来说可能是非常少见的,不过当你需要的时候,在IE和Firefox中的句法是不同的。这里所写出的代码将是最最基本的,也可能是某个复杂事件处理中的某一个部分。但他们可以解释其中的异同点。同时,必须指出的是结果相对于firefox,IE会有更在的不同,这种方法本身就是有BUG的。通常,这种不同可以用&#34;拖动位置&#34;来得到补偿,但,那是另外一个主题的文章了: ) ! 在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; [b]6. 获取可见区域、窗口的大小[/b] 有时,我们会需要找到浏览器的可视位置的大小,通常我们称之为&#34;可见区域&#34;。 在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; [b]7. Alpha 透明[/b] 好吧,这并不是一个JavaScript句法问题,而是源自于CSS的Alpha透明。但当某个物体需要淡入/出则需要JavaScript来表现,这是通过访问CSS的Alpha透明设置来完成的,通常在一个循环中完成。你需要通过来修改的JavaScript的代码如下:: 在IE中这样写: #myElement { filter: alpha(opacity=50); } 在firefox中这样写: #myElement { opacity: 0.5; } 在IE中这样写: var myObject = document.getElementById(&#34;myElement&#34;); myObject.style.filter = &#34;alpha(opacity=80)&#34;; 在firefox中这样写: var myObject = document.getElementById(&#34;myElement&#34;); myObject.style.opacity = &#34;0.5&#34;; 还有什么不同的吗? 这是作者(via:[url=http://www.impressivewebs.com/7-javascript-differences-between-firefox-ie/]7 JavaScript Differences Between Firefox &amp; IE[/url] )个人根据自己的经验整理的,而sofish在JavaScript上依然是一个新手。如果还有更多的不同,欢迎大家提出来,分享出来,共同学习! 什么玩意啊,难道昨天用 obj.style.styleFloat老是浮动不了,用css定义明明可以的,原来FireFox是个另类。唉,郁闷死了!