编写跨浏览器的javascript代码必备[js多浏览器兼容写法]


Posted in Javascript onOctober 29, 2008
序号 操作 分类 IE(6.0) FireFox(2.0) Mozilla(1.5) 当前浏览器 备注
1 "." 访问tag的固有属性 OK OK OK OK  
2 "." 访问tag的用户定义属性eg: OK NO NO OK 可以用getAttribute函数 替代
3 obj.getAttribute 访问tag的固有属性 OK OK OK OK  
4 obj.getAttribute 访问tag的用户定义属性eg: OK OK OK OK  
5 document.all 访问document的所有子元素eg:document.all OK OK NO OK 建议用childNodes对象或者getElementById函数实现对应操作。有人说它不能取Div元素,测试结果是可以,不知道是不是还有其它因素会影响测试结果。
6 obj.all 访问非document元素的所有子元素eg: document.getElementById("mydiv").all OK NO NO OK 同上
7 getElementById() 根据元素的id/name来取得元素。如果元素只设置name属性,没有设置id属性。 OK NO NO OK 注意:很多元素是没有name属性的,eg: td, div,span...
8 变量名 = "" 隐式定义变量-通过向变量名附值方式定义一个新的变量。 OK OK OK OK 建议:为避免必要的麻烦,显示定义变量。eg:var tmp;
9 id 通过id直接调用对象eg: test_result_1.innerHTML = "" OK OK NO OK eval()函数用来执行脚本,所以向eval函数里面传入对象id/name的话,IE同样会返回对象的引用。建议用document.getElementById(id)方式调用注意:因为这个原因,IE中隐式定义的变量不能和HTML中元素的id/name相同。
10 name 通过name直接调用对象eg: test_for_this_name.innerHTML = "" OK NO NO OK 同上/ 原因同7
11 name 支持的特殊字符("!",".","@","#","$"," NO OK OK NO 其它的字符没有测试
12 tr.innerHTML = "" 设置TR元素的内部HTML脚本 NO OK OK NO 在IE中,table、tr的innerHTML是只读属性,不能够对其直接设置。可以通过insertRow/insertCell函数进行设置。
13 cells对象访问 访问tr的cells对象前提:tr元素是被删除后的tr对象,或者是用cloneNode(true)复制的删除前的tr对象 NO OK OK undefined 可以将其插入Table再访问,或者可以用getElementsByTagName函数 对td/th访问。删除后的rows对象不存在这个问题。其它元素?
14 (index) 访问集合类对象eg: document.getElementsByTagName("TD")(0) OK NO NO OK 建议用正式的操作符"[]".
15 obj.toString() 取得对象的字符串"[object 对象类型的名称]".eg: td == "[object HTMLTableCellElement]" NO OK OK NO 可以省略toString()函数,直接用对象来操作。注:在IE中返回"[object]"。
16 obj.class 定义对象的css式样/风格。eg: td.class="XPstyle"; NO OK NO - 无法写测试代码,会有编译错误!可以自己用typeof(class) == null来测试一下,没有异常就在代码中可以使用。在HTML脚本中用class,但是在Javascript中应该用classname(class是JS的保留关键字).注意:用 setAttribute可以把class值设置到对象中去,但是不会被当作css式样来解析。
17 const 保留关键字,用于定义常量。eg:const HOURS = 24; NO OK OK - 暂时只能不使用const。
18 input.type 变更input元素的类型eg: input.type="button"; NO OK OK NO IE可以初始input元素类型,但是不能变更类型。如果必须变更,可以用更换input元素的方式。
19 obj.children 访问对象的子元素集合eg: document.body.children.length; OK NO NO OK 可以用childNodes对象替代。
20 node.replaceNode 替换新的节点对象eg: oldNode.replaceNode(newNode); OK NO NO OK 可以用replaceChild函数替换。
21 node.removeNode 删除已有节点对象eg.oldNode.removeNode(true); OK NO NO OK 可以用oldNode.parentNode.removeChild(oldNode)方式实现。
22 node.insertBefore 在指定节点对象前面插入一个节点对象document.body.insertBefore(newN, oldN); OK OK OK OK  
23 obj.parentElement 访问对象的父元素eg: document.body.parentElement.id; OK NO NO OK 可以用parentNode对象替代。
24 obj.childNodes.length 返回子节点的数量,和tag的数量相同。eg:document.body.childNodes.length; OK NO NO OK FF/Mozilla中,空白或者换行是文本节点,是childNodes的成员。可以用node.getElementsByTagName()回避。
25 obj.insertAdjacentElement 向指定的位置插入元素eg: obj.insertAdjacentElement("beforeBegin",button); OK NO NO OK insertAdjacentElement函数和insertAdjacentText函数也类似。可以用insertBefore函数实现类似功能。
26 createElement() 创建指定类型元素。前提:元素为HTML脚本eg:document.createElment(""); OK NO NO OK 可以先创建出对象元素,再进行属性设置;或者直接以InnerHTML的形式加到对应位置。 
27 nodeName 取对象(tag,attribute,textnode)节点名称eg: name = obj.nodeName; OK OK OK OK 有人说存在差异,不知道是具体的前提条件,先记录备考。替代方案:如果节点是tag元素可以用"tagName"取值;如果节点是attribut对象可以用"name"取值;如果节点是textnode元素可以用nodeType==3判断。
28 window.event 取得当前的事件对象eg: window.event; OK NO NO ? 可以主动向事件的响应函数传入event参数。eg:help
29 event.target 取得事件的触发对象eg: e.target; NO OK OK 可以和srcElement共同使用;可以主动向事件的响应函数传入触发对象元素。eg:help
30 event.srcElement 取得事件的触发对象eg: e.srcElement; OK NO NO 可以和target共同使用;可以主动向事件的响应函数传入触发对象。eg: var obj = (e.target) ? e.target : e.srcElemtn;
31 event对象属性 当前三个浏览器的共同拥有的属性:altKeybuttoncancelBubbleclientXclientYctrlKeyscreenXscreenYshiftKeytype  altLeftbehaviorCookiebehaviorPartbookmarksboundElementscontentOverflowctrlLeftdataFlddataTransferfromElementkeyCodenextPageoffsetXoffsetYpropertyNamequalifierreasonrecordsetrepeatreturnValuesrcElementshiftLeftsrcFiltersrcUrntoElementwheelDeltaxy  bubblescancelablecurrentTargetdetaileventPhaseexplicitOriginalTargetisCharisTrustedlayerXlayerYmetaKeyoriginalTargetpageXpageYrangeOffsetrangeParentrelatedTargettargettimeStampviewwhich bubblescancelablecharCodecurrentTargetdetaileventPhaseexplicitOriginalTargetisCharkeyCodelayerXlayerYmetaKeyoriginalTargetpageXpageYpopupWindowURIrangeOffsetrangeParentrelatedTargetrequestingWindowURItargettimeStampviewwhich ? event对象的不同点太多,在使用的时候需要一一检查才行。具体可以用页面下方的测试区域试验。
32 注册event 用attachEvent函数注册 OK NO NO - 小心内存泄漏!!!事件处理完后一定要调用detachEvent函数销毁事件,而且要注意避免重复注册。
33 注册event addEventListener函数注册 NO OK OK -  
34 注册event obj.onxxx = Function("响应函数名称或代码");方式注册eg: btn.onclick = Function(doclick);btn.onclick = Function("return 1+1;"); OK OK OK -  
35 销毁event detachEvent函数销毁 OK NO NO -  
36 销毁event removeEventListener函数销毁 NO OK OK -  
37 销毁event obj.onxxx = null;方式注册eg: btn.onclick = null; OK OK OK -  
38 触发event fireEvent函数eg:btn.fireEvent("onclick");FF:var e = document.createEvent("Events"); e.initEvent("click", true, false); element.dispatchEvent(event) OK NO NO -  
39 触发event dispatchEvent函数eg: var evt = document.createEvent("MouseEvents");evt.initMouseEvent("click", true, true);btn.dispatchEvent(evt); NO OK OK -  
Javascript 相关文章推荐
javascript学习笔记(十二) RegExp类型介绍
Jun 20 Javascript
jquery each的几种常用的使用方法示例
Jan 21 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
AngularJS中$interval的用法详解
Feb 02 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
原生Javascript和jQuery做轮播图简单例子
Oct 11 Javascript
JavaScript数据结构之二叉树的遍历算法示例
Apr 13 Javascript
vue数据双向绑定的注意点
Jun 23 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
Sep 02 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
Feb 08 Javascript
详解如何使用babel进行es6文件的编译
May 29 Javascript
vue实现通讯录功能
Jul 14 Javascript
关于B/S判断浏览器断开的问题讨论
Oct 29 #Javascript
JS写的数字拼图小游戏代码[学习参考]
Oct 29 #Javascript
JavaScript函数、方法、对象代码
Oct 29 #Javascript
js身份证验证超强脚本
Oct 26 #Javascript
javascript引导程序
Oct 26 #Javascript
javascript笔试题目附答案@20081025_jb51.net
Oct 26 #Javascript
Div自动滚动到末尾的代码
Oct 26 #Javascript
You might like
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php数组一对一替换实现代码
2012/08/31 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
Laravel向公共模板赋值方法总结
2019/06/25 PHP
实现变速回到顶部的JavaScript代码
2011/05/09 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
深入浅析JavaScript中的in关键字和for-in循环
2020/04/20 Javascript
Python创建日历实例
2014/08/21 Python
python类继承用法实例分析
2014/10/10 Python
Python中使用PDB库调试程序
2015/04/05 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
python实现手机销售管理系统
2019/03/19 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
python中的时区问题
2021/01/14 Python
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
国贸专业自荐信范文
2014/03/02 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
开工典礼策划方案
2014/05/23 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
党员对照检查材料
2014/09/22 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书