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


序号


操作


分类


IE
(6.0)


FireFox
(2.0)


Mozilla
(1.5)


当前
浏览器


备注


1


"."


访问tag的固有属性


OK


OK


OK


OK


 


2


"."


访问tag的用户定义属性
eg: <input type="checkbox" myattr="test">


OK


NO


NO


OK


可以用getAttribute函数 替代


3


obj.getAttribute


访问tag的固有属性


OK


OK


OK


OK


 


4


obj.getAttribute


访问tag的用户定义属性
eg: <input type="checkbox" myattr="test">


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


支持的特殊字符("!",".","@","#","$","<",...)
eg: document.getElementsByName("aaaa!page");


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("<input type='radio' value='test'>");


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:<a onclick="javascript:showHelp(event)">help</a>


29


event.target


取得事件的触发对象
eg: e.target;


NO


OK


OK



可以和srcElement共同使用;可以主动向事件的响应函数传入触发对象元素。
eg:<a onclick="javascript:showHelp(this, event)">help</a>


30


event.srcElement


取得事件的触发对象
eg: e.srcElement;


OK


NO


NO



可以和target共同使用;可以主动向事件的响应函数传入触发对象。
eg: var obj = (e.target) ? e.target : e.srcElemtn;


31


event对象属性


当前三个浏览器的共同拥有的属性:
altKey
button
cancelBubble
clientX
clientY
ctrlKey
screenX
screenY
shiftKey
type

 


altLeft
behaviorCookie
behaviorPart
bookmarks
boundElements
contentOverflow
ctrlLeft
dataFld
dataTransfer
fromElement
keyCode
nextPage
offsetX
offsetY
propertyName
qualifier
reason
recordset
repeat
returnValue
srcElement
shiftLeft
srcFilter
srcUrn
toElement
wheelDelta
x
y
 


bubbles
cancelable
currentTarget
detail
eventPhase
explicitOriginalTarget
isChar
isTrusted
layerX
layerY
metaKey
originalTarget
pageX
pageY
rangeOffset
rangeParent
relatedTarget
target
timeStamp
view
which


bubbles
cancelable
charCode
currentTarget
detail
eventPhase
explicitOriginalTarget
isChar
keyCode
layerX
layerY
metaKey
originalTarget
pageX
pageY
popupWindowURI
rangeOffset
rangeParent
relatedTarget
requestingWindowURI
target
timeStamp
view
which


?


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


-


 

时间: 2024-09-28 18:33:25

编写跨浏览器的javascript代码必备[js多浏览器兼容写法]_javascript技巧的相关文章

Javascript代码实例:JS获取浏览器宽度

文章简介:js获取浏览器窗口宽高及网页宽高. js获取浏览器窗口宽高及网页宽高: /** / THIRD FUNCTION * getPageSize() by webjx.com * * @return Array Return an array with page width, height and window width, height */function ___getPageSize() { var xScroll, yScroll; if (window.innerHeight &

JavaScript之Vue.js【入门基础】_javascript技巧

本篇将简单介绍一下Vue.js,并在Node.js环境下搭建一个简单的Demo. 一.简介 我个人理解,Vue.js是一套前端视图层的框架,它只关心视图展示和数据绑定,它的一些语法与Angular 1非常相似,如果有Angular 1相关的使用经验,上手会非常快. 相比较其他的React.Angular 2等MVVM框架,它更加的轻量,效率也更高,也能更好的与其他库集成. 它拥有以下几个出色的特性: 数据双向绑定 指令 模板 组件 当前最新的版本为2.1.4.后续也会在这个版本下演示Demo.

纯javascript代码实现计算器功能(三种方法)_javascript技巧

今天来分享一下用纯javascript代码编写的一个计算器程序,很多行业都能用到这个程序,例如做装修预算.贷款利率等等. 首先来看一下完成后的效果: 方法一: 具体编写代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=&q

9行javascript代码获取QQ群成员具体实现_javascript技巧

昨天看到一条微博:「22 行 JavaScript 代码实现 QQ 群成员提取器」. 本着好奇心点击进去,发现没有达到效果,一是 QQ 版本升级了,二是博客里面的代码也有些繁琐. 于是自己试着写了一个,算上空行才 9 行,麻雀虽小,五脏俱全. 复制代码 代码如下: var ids = document.querySelectorAll(".member_id"); var names = document.querySelectorAll(".member_name"

JavaScript 用Node.js写Shell脚本[译]_javascript技巧

访问参数 你可以通过process.argv来访问到命令行参数,它是一个包含下列内容的数组: [ nodeBinary, script, arg0, arg1, ... ] 也就是说,第一个参数是从process.argv[2]开始的,你可以像下面这样遍历所有的参数: 复制代码 代码如下: process.argv.slice(2).forEach(function (fileName) { ... }); 如果你想对参数做更复杂的处理,可以看一下Node.js模块nomnom和optimist

JavaScript代码实现左右上下自动晃动自动移动_javascript技巧

最近几天做了一个项目,原来是用css3动画做的,由于不兼容IE,改成用js做了,特此分享给大家,供大家参考,代码有bug欢迎提出,写的不好还请见谅! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.

Javascript笔记一 js以及json基础使用说明_javascript技巧

JavaScript中的代码只体现为一种形式,就是function. 注意:以上单词都是小写的,不要和Number, String, Object, Function等JavaScript内置函数混淆,JavaScript语言是区分大小写. typeof(null)返回object,但null并非object. JavaScript的代码就只有function一种形式,function就是函数的类型.函数的写法有"定义式"和"变量式". 定义式的函数语句会优先执行.

js调用css属性写法_javascript技巧

1.对于没有中划线的css属性一般直接使用style.属性名即可. 如:obj.style.margin,obj.style.width,obj.style.left,obj.style.position等. 2.对于含有中划线的css属性,将每个中划线去掉并将每个中划线后的第一个字符换成大写即可. 如:obj.style.marginTop,obj.style.borderLeftWidth,obj.style.zIndex,obj.style.fontFamily等. 因为float是Jav

javascript 图片上传预览-兼容标准_javascript技巧

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu