引用 js在IE与FF之间的区别详细解析


Posted in Javascript onNovember 20, 2013

js调试工具推荐firefox的firebug插件

能够给js设置断点执行

能够运行时修改css样式

查看dom模型等

☆IE8自带的developerbar也很不错

☆打开firefox所有js警告:
在地址栏里录入:about:config
双击,设置javascriptoptionrestict打开为true能够看到很多警告,利于纠错

☆IE->firefoxjavascript类

△document.all("id")->document.getElementById("id")
并且控件尽量用id,而不是name标识

提示:
如果控件只有name,没有id,用getElementById时:
IE:也可以找到对象
FF:返回NULL

△获得form里某个元素的方法
elForm.elements['name'];

△取集合元素时,ie支持[],()2种写法,但是ff仅支持[],如:
table.rows(5).cells(0)
改为:
table.rows[5].cells[0]

△判断对象是否是object的方法应该为
if(typeof对象变量=="object")
而不是if(对象变量=="[object]")

△eval(对象名称)->document.getElementById
FF支持eval函数

△通过id直接调用对象
对象id.value=""
改为
document.getElementById("name").value=""

△obj.insertAdjacentElement("beforeBegin",objText);

改为用
obj.parentNode.insertBefore(objText,obj);

△FF的createElement不支持HTML代码

用document.write(esHTML);

或者创建元素后再设置属性,对input元素来说,需要先设置type再加入到dom里
varobj=createElement("input");
obj.type="checkbox";

varobj2=document.getElementById("id2");
obj2.parentNode.insertBefore(obj,obj2);

如果是直接插入html代码,则可以考虑用
createContextualFragment

△innerText->textContent

△对象名称中的$不能识别,建议改为_
objName="t1$spin"
改为
objName="t1_spin"

△FF里设置Attribute为某个对象,然后再取出来,这时候对象的属性都丢失了?
objText.setAttribute("obj",obj);

alert(obj.id)//正确的名字
obj=objText.getAttribute("obj");
alert(obj.id)//null

在IE下没有问题,FF对setAttribute来说,第2个参数都是字符串型的!!!
所以如果第2个参数是对象时,相当于调用对象的toString()方法了

解决的方法是用下面的调用方式:
objText.dropdown_select=obj;
obj=objText.dropdown_select

△className->class
FF下用class代替IE下的className
由于class是关键字,所以需要用setAttribute/getAttribute才行
setAttribute("class","css样式名称");

△在html里定义的属性,必须用getAttribute才行
<tdid="TD1"isOBJ="true">

获取时:
document.getElementByID("TD1").isOBJ总返回undefined,IE下是可以的

应该用:
document.getElementByID("TD1").getAttribute("isOBJ")

△FF里select控件不再是:总是在顶端显示
所以可能需要设置控件的zIndex
IE里覆盖select控件的方法是,用ifame

△对于if(vars==undefined)下面的值用于判断是等同的
undefined
null
false
0

△如果FF调用obj.focus();报错,请尝试改为:
window.setTimeout(function(){obj.focus();},20);

△FF下,keyCode是只读的,那把回车转换为tab怎么办?在录入时进行键值转换怎么办??

变通的方法是:
1.回车跳转->自己写跳转处理代码.
遍历dom里所有的元素,找到当前元素的下一个能够设置焦点的元素,给其设置焦点

2.在能够录入的控件里,
把选中的部分替换为新录入的内容:vartext=String.fromCharCode(event.keyCode);
同时阻止按键事件上传,调用:event.preventDefault()

△<button>会被firefox解释为提交form或者刷新页面???
需要写标准<buttontype="button">
或者在onclick="原函数调用();returnfalse;"

△在firefox里,document.onfocus里获得不到实际获得焦点的控件?
为什么document.keydown可以呢?

△children->childNodes

△sytle.pixelHeight->style.height

△判断函数或者变量是否存在
if(!("varName"inwindow))varVarName=1;

△document.body.clientWidth

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN">

如果html包含上面的语句,则应该用下面的方法获取
document.documentElement.clientWidth

△window.createPopup

FF不支持

△document.body.onresize

FF不支持

用window.onresize

注意,页面打开时并不会触发onresize事件?需要在onload里也调用一次才行

△box模型的问题

IE下默认的是content-box为了统一,可用设置:

div,td{-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0;}

也可用在文档头加入:

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

但是对IE旧代码影响较大

△注册事件

IE:attachEvent

FF:addEventListener("blur",myBlur,false);

第1个参数事件名称不需要带"on"

第3个参数false代表事件传递从事件对象沿dom树往body方向传

△触发事件

IE:obj.fireEvent("onclick");

FF:

vare=document.createEvent("Events");

e.initEvent("click",true,false);

element.dispatchEvent(event)

△在事件处理函数中获得对象句柄

varoThis=this;

obj.onfocus=function(evt){

oThis.doOnFocus(evt);

}

△统一事件处理框架代码

doOnFocus(evt){

evt=evt||window.event;

varel=evt.target||evt.srcElement;

//后续处理

}

△FF不支持onpropertychange事件

但是FF里可以定义属性的setter方法,如下面的:

HTMLElement.prototype.__defineSetter__("readOnly",function(readOnly){

//构造虚拟的event对象

varevt=[];

evt["target"]=this;

evt["propertyName"]='readOnly'

//onpropertychange函数需要定义evt参数,参考统一事件处理框架代码

if(this.onpropertychange)this.onpropertychange(evt);

});

☆IE->firefoxcss类

△cursor:hand->cursor:pointer

△expressionfirefox不支持

在IE下expression也非常消耗CPU,所以不应该使用!!

为了达到较好的效果,应该建立自己的expressiontojavascript的处理函数

这样在IE和FF里就都能用了.

△FILTERfirefox不支持

filter:Alpha(Opacity=50);

替换为

-moz-opacity:0.5;

△text-overflow

不支持

△transparent

firefox下obj.setAttribute("bgColor","#ffffff")只支持颜色

必须用obj.style.backgroundColor="transparent"才行

△FF下text控件高度与IE不同,统一一下

input[type=text]{

height:20px;

}

注意input与[之间不能有空格!

△font在IE里不能对body和td等起作用,FF可以

统一用font-family

Javascript 相关文章推荐
js滚动条多种样式,推荐
Feb 05 Javascript
javascript变量作用域使用中常见错误总结
Mar 26 Javascript
js history对象简单实现返回和前进
Oct 30 Javascript
PHP实现的各种中文编码转换类分享
Jan 23 Javascript
JS基于VML技术实现的五角星礼花效果代码
Oct 26 Javascript
jquery实现全选、反选、获得所有选中的checkbox
Sep 13 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
Dec 04 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
Jun 23 Javascript
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 Javascript
angularjs实现柱状图动态加载的示例
Dec 11 Javascript
微信小程序定位当前城市的方法
Jul 19 Javascript
AngularJS ui-router刷新子页面路由的方法
Jul 23 Javascript
JavaScript之IE的fireEvent方法详细解析
Nov 20 #Javascript
JavaScript中setInterval的用法总结
Nov 20 #Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
Nov 20 #Javascript
jquery iframe操作详细解析
Nov 20 #Javascript
JS获取当前日期和时间的简单实例
Nov 19 #Javascript
js 自动播放的实例代码
Nov 19 #Javascript
鼠标滚轴控制文本框值的JS代码
Nov 19 #Javascript
You might like
Discuz论坛密码与密保加密规则
2016/12/19 PHP
php四种定界符详解
2017/02/16 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
jQuery UI Autocomplete 1.8.16 中文输入修正代码
2012/04/16 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
微信QQ的二维码登录原理js代码解析
2016/06/23 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
react redux入门示例
2018/04/19 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
js实现双色球效果
2020/08/02 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
Python爬虫:url中带字典列表参数的编码转换方法
2019/08/21 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
python super()函数的基本使用
2020/09/10 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
优秀的计算机专业求职信范文
2013/12/27 职场文书
经典演讲稿范文
2013/12/30 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
详解Django的MVT设计模式
2021/04/29 Python
如何使用SQL Server语句创建表
2022/04/12 SQL Server
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python