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和Asp、Php等后端程序间传值编码统一
Apr 17 Javascript
使用Post提交时须将空格转换成加号的解释
Jan 14 Javascript
js Math 对象的方法
Sep 01 Javascript
jquery实现具有收缩功能的垂直导航菜单
Feb 16 Javascript
Javascript 事件冒泡机制详细介绍
Oct 10 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
layui实现table加载的示例代码
Aug 14 Javascript
详解ES6中的 Set Map 数据结构学习总结
Nov 06 Javascript
微信小程序实现的一键连接wifi功能示例
Apr 24 Javascript
微信小程序 自定义复选框实现代码实例
Sep 04 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
Oct 20 Javascript
原生JS实现留言板功能
Feb 08 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一些有意思的小区别
2006/12/06 PHP
php Calender(日历)代码分享
2014/01/03 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
深入了解JS之作用域和闭包
2020/06/16 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
python中温度单位转换的实例方法
2020/12/27 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
化工专业应届生求职信
2013/11/08 职场文书
机关财务管理制度
2014/01/17 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis