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 相关文章推荐
jquery获取自定义属性(attr和prop)实例介绍
Apr 21 Javascript
js 获取input点选按钮的值的方法
Apr 14 Javascript
node.js中的querystring.unescape方法使用说明
Dec 10 Javascript
javascript瀑布流布局实现方法详解
Feb 17 Javascript
JavaScript利用HTML DOM进行文档操作的方法
Mar 28 Javascript
AngularJs基本特性解析(一)
Jul 21 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
Dec 16 Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 Javascript
ECMAscript 变量作用域总结概括
Aug 18 Javascript
Java设计中的Builder模式的介绍
Mar 22 Javascript
js中let能否完全替代IIFE
Jun 15 Javascript
js实现幻灯片轮播图
Aug 14 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/11 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
写js时遇到的一些小问题
2010/12/06 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
利用jQuery+localStorage实现一个简易的计时器示例代码
2017/12/25 jQuery
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
js实现简单点赞操作
2020/03/17 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
Node.JS如何实现JWT原理
2020/09/18 Javascript
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
Python和Go语言的区别总结
2019/02/20 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
Django中ORM的基本使用教程
2020/12/22 Python
会计实习生自我鉴定
2013/12/12 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
限期整改通知书
2015/04/22 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
导游词之台湾阿里山
2019/10/23 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL