原生javascript兼容性测试实例


Posted in Javascript onJuly 01, 2013

1.获取样式表里面的width,border color 之类的css(不是行间) 主要是IE6-7支持currentStyle,标准浏览器支持getComputedStyle;

实例:封装函数

function getStyle(obj,name){ 
if(obj.currentStyle){ 
return obj.currentStyle[name]; 
} 
else{ 
return getComputedStyle(obj,false)[name]; 
} 
}

调用:getStyle('color');

2.获取滚动的距离
document.body.scrollTop 适用于 标准浏览器
document.documentElement.scrollTop 适用于IE9以下版本
兼容性可以这样写
var top = document.body.scrollTop | document.documentElement.scrollTop;

3.事件对象
标准浏览器:事件对象作为事件函数的参数
IE低版本 需要直接用event对象(全局)

function (ev){ 
var event = ev || event; 
}

现在event就作为了事件对象

4.绑定事件 IE 的绑定事件为 attachEvent/detachEvent(绑定或取消);标准浏览器 addEventListener/removeEventListener(绑定或取消)
以下是事件绑定或取消的参数,在事件绑定中 函数不能是匿名函数 否则取消不掉
addEventListener的使用方式:

target.addEventListener(type, listener, useCapture);

target: 文档节点、document、window 或 XMLHttpRequest。
type: 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener :实现了 EventListener 接口或者是 JavaScript 中的函数。
useCapture :是否使用捕捉,一般用 false 。例如:document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);

IE中:

target.attachEvent(type, listener);
target: 文档节点、document、window 或 XMLHttpRequest。
type: 字符串,事件名称,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等。
listener :实现了 EventListener 接口或者是 JavaScript 中的函数。 例如:document.getElementById("txt").attachEvent("onclick",function(event){alert(event.keyCode);});

事件绑定的封装函数:

function addEvent(obj,ev,fn){ 
if(obj.attachEvent){ 
obj.attachEvent('on'+ev,fn) 
} 
else{ 
obj.addEventListener(ev, fn, false); } 
}

这样的封装函数如果绑定事件fn函数里面用到this 需提防 this 为window(只有IE低版本有这个bug) 不是obj;
addEvent(document,'click',function(ev){ var ev=ev||window.event; 
var target = ev.target||ev.srcElement; // 获得事件源 主要处理IE低版本this为window之bug 
alert(target) 
});

绑定之取消事件 fn为函数名字
function removeEvent(obj,ev,fn){ 
if(obj.detachEvent){ 
obj.detachEvent('on'+ev,fn) 
} 
else{ 
obj.removeEventListener(ev, fn, false); } 
}

5.ajax
Ajax创建XMLHttp对象 标准版浏览器与IE低版本不兼容
标准版创建XMLHttp对象:
//1.创建对象 
if(window.XMLHttpRequest) 
{ 
var oAjax=new XMLHttpRequest();//标准浏览器 
} 
else 
{ 
var oAjax=new ActiveXObject("Microsoft.XMLHTTP");//IE低版本 
} 
alert(oAjax);

6.取消默认事件
js中默认事件取消是主要是两种 return false 和 preventDefault
取消默认事件中return false 是兼容任何浏览器 但是如果遇到事件绑定的 addEventListener 会取消不掉默认事件
取消默认右键事件例子:
document.addEventListener('contextmenu',function(ev){ 
ev.preventDefault(); 
})) 
document.oncontextmenu = function(){ 
return false; 
}

7.call与apply 的区别
call、apply 可以调用函数
例如
function show(){ 
alert(this) 
} 
//show(); 弹出window 
//show.call();弹出windwo 
//show.call(this) //弹出window 
//show.call(5); //弹出5; 
show.call(this,5); //弹出window

call(this,arg1,arg2,...)可以看出call里面的参数 this主要是指代事件对象 以后参数是函数中用到的参数
用call与apply来主要是修改this的,功能上和普通的函数没有什么太大的区别
apply(this,arguments) 主要是对参数不确定来使用
8、DOM取得子节点children和childNodes
children 取得 子节点 只能是取第一层 必须是标签节点
例如:
<span><a href="#">文字1</a></span> 
<span><a href="#">文字2</a></span>

children[0] 这样只能是取到第一个span 要是想取到第一个a标签 children[0].children[0],所以说children的长度只是2;
childNodes在高版本上会算上空文本 在火狐 谷歌上 上面的是长度是5;在IE低版本(6-8)长度是4.
Javascript 相关文章推荐
JavaScript 设计模式学习 Singleton
Jul 27 Javascript
基于jquery的图片的切换(以数字的形式)
Feb 14 Javascript
jQuery中change事件用法实例
Dec 26 Javascript
浅谈Angular.js中使用$watch监听模型变化
Jan 10 Javascript
微信小程序 radio单选框组件详解及实例代码
Jan 10 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
Feb 23 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
JavaScript定义函数的三种实现方法
Sep 23 Javascript
动态加载JavaScript文件的3种方式
May 05 Javascript
vue-i18n结合Element-ui的配置方法
May 20 Javascript
使用 node.js 模仿 Apache 小部分功能
Jul 07 Javascript
面向对象继承实例(a如何继承b问题)(自写)
Jul 01 #Javascript
批量实现面向对象的实例代码
Jul 01 #Javascript
js原生appendChild的bug解决心得分享
Jul 01 #Javascript
Jquery时间验证和转换工具小例子
Jul 01 #Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
Jul 01 #Javascript
js函数排序的实例代码
Jul 01 #Javascript
利用JS延迟加载百度分享代码,提高网页速度
Jul 01 #Javascript
You might like
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
jquery select选中的一个小问题
2009/10/11 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
js实现圆盘记速表
2015/08/03 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
Django中的CBV和FBV示例介绍
2018/02/25 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
努力学习演讲稿
2014/05/10 职场文书
博士生求职信
2014/07/06 职场文书
教师个人培训总结
2015/02/11 职场文书
交通安全学习心得体会
2016/01/18 职场文书
护理工作心得体会
2016/01/22 职场文书
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers