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 相关文章推荐
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 Javascript
getElementByIdx_x js自定义getElementById函数
Jan 24 Javascript
input标签内容改变的触发事件介绍
Jun 18 Javascript
深入分析jquery解析json数据
Dec 09 Javascript
JAVA四种基本排序方法实例总结
Jul 24 Javascript
JavaScript事件学习小结(一)事件流
Jun 09 Javascript
关于TypeScript中import JSON的正确姿势详解
Jul 25 Javascript
H5实现仿flash效果的实现代码
Sep 29 Javascript
通过函数作用域和块级作用域看javascript的作用域链
Aug 05 Javascript
详解如何在nuxt中添加proxyTable代理
Aug 10 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
Sep 15 jQuery
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 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
谈一谈收音机的高放电路
2021/03/02 无线电
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
Angular2 自定义validators的实现方法
2017/07/05 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
python安装pil库方法及代码
2019/06/25 Python
Python + OpenCV 实现LBP特征提取的示例代码
2019/07/11 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
python命令 -u参数用法解析
2019/10/24 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
行政助理求职自荐信
2013/10/26 职场文书
挂牌仪式主持词
2014/03/20 职场文书
市政管理求职信范文
2014/05/07 职场文书
购房委托书
2014/10/15 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python
解决numpy和torch数据类型转化的问题
2021/05/23 Python