IE和Firefox之间在JavaScript语法上的差异


Posted in Javascript onApril 22, 2016

尽管 JavaScript 历史上使用冗长而令人生厌的代码块来标的特定浏览器的时期已经结束了,但是偶尔使用一些简单的代码块和对象检测来确保一些代码在用户机器上正常工作依然是必要的。

这篇文章中,我会略述一下 Internet Explorer 和 Firefox 在 JavaScript 语法上不同的 7 个方面。

1. CSS “float” 属性

获取给定对象的特定 CSS 属性的基本语法是 object.style 属性,而且有连字符的属性要用骆驼命名法来代替。例如,获取一个 ID 为 “header” 的 div 的 background-color 属性,我们要用如下语法:

document.getElementById("header").style.borderBottom= "1px solid #ccc";

但是由于 “float” 是 JavaScript 的保留词,我们就无法使用 object.style.float 来获取 “float” 属性了。一下是我们在两种浏览器中的使用的方法:

IE 语法: 

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

Firefox 语法: 

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

2. 元素的计算样式

通过使用上述的 object.style.property, JavaScript 可以很容易的获取和修改对象的设定 CSS 样式。但是这一语法的局限在于,它只能取得内联在 HTML 里的样式,或者直接使用 JavaScript 设定的样式。style 对象不能获取使用外部样式表设定的样式。为了获取对象的”计算样式”,我们使用以下代码:

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”属性的情况,这两种浏览器使用不同的 JavaScript 方法来获取这个属性。

IE 语法: 

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

Firefox 语法: 

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

4. 获取 label 标签的 “for” 属性

和 3 一样,使用 JavaScript获取 label 的 “for” 属性也有不同语法。

IE 语法: 

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

Firefox 语法: 

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

对于 setAtrribute 方法来说也是同样的语法。

5. 获取光标位置

获取元素的光标位置比较少见,如果需要这么做,IE 和 Firefox 的语法也是不同的。这个示例代码是相当基础的,一般用作许多复杂事件处理的一部分,这里仅用来描述差异。需要注意的是,IE 中的结果和 Firefox 中是不同的,因此这个方法有些问题。通常,这个差异可以通过获取 “滚动位置” 来补偿 - 但那是另外一篇文章的课题了。

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 的语法项目 - alpha 透明是通过 CSS 来设置的。但是当对象通过 JavaScript 设置为淡入淡出时,这就需要通过获取 CSS 的 alpha 设定来实现,一般是在循环内部。要通过以下 JavaScript 来改变 CSS 代码:

IE 语法:

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

Firefox 语法:

#myElement {
opacity: 0.5;
}

要使用 JavaScript 获取这些值,需要使用 style 对象:

IE 语法: 

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

Firefox 语法:

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

当然,已经说到了,一般是在循环中间来改变 opcity/alpha,来创建动画效果,但这这是个简单的例子,只是为了明白地描述方法是如何实现地。

7个方面在JavaScript语法上不同的点,希望对大家的学习有所帮助。

Javascript 相关文章推荐
JavaScript 检测浏览器和操作系统的脚本
Dec 26 Javascript
Javascript new关键字的玄机 以及其它
Aug 25 Javascript
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
Jul 31 Javascript
基于jQuery的简单九宫格实现代码
Aug 09 Javascript
jQuery中nextAll()方法用法实例
Jan 07 Javascript
学习JavaScript设计模式之责任链模式
Jan 18 Javascript
AngularJS 入门教程之事件处理器详解
Aug 19 Javascript
ie下js不执行的几种可能
Feb 28 Javascript
原生js jquery ajax请求以及jsonp的调用方法
Aug 04 jQuery
postman+json+springmvc测试批量添加实例
Mar 31 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
Aug 12 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
May 13 Javascript
动态加载JavaScript文件的两种方法
Apr 22 #Javascript
JavaScript记录光标在编辑器中位置的实现方法
Apr 22 #Javascript
在AngularJS中使用jQuery的zTree插件的方法
Apr 21 #Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
Apr 21 #Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
Apr 21 #Javascript
javascript常见数字进制转换实例分析
Apr 21 #Javascript
BootStrap和jQuery相结合实现可编辑表格
Apr 21 #Javascript
You might like
个人站长制做网页常用的php代码
2007/03/03 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
javascript some()函数用法详解
2014/11/13 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
javascript动态创建及删除元素的方法
2014/12/22 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
Python查找相似单词的方法
2015/03/05 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
Python线程同步的实现代码
2018/10/03 Python
Python中collections模块的基本使用教程
2018/12/07 Python
Python二元算术运算常用方法解析
2020/09/15 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
中兴通讯全球官方网站:ZTE
2020/12/26 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
机电一体化职业规划书
2014/01/07 职场文书
股票投资建议书
2014/05/19 职场文书
2014年工程部工作总结
2014/11/25 职场文书
招商银行工作证明
2015/06/17 职场文书
工作感言一句话
2015/08/01 职场文书
施工安全责任协议书
2016/03/23 职场文书
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python
详解OpenCV曝光融合
2022/04/29 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript