原生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 相关文章推荐
用js实现的检测浏览器和系统的函数
Apr 09 Javascript
jQuery最佳实践完整篇
Aug 20 Javascript
js字符串转换成xml对象并使用技巧解读
Apr 18 Javascript
使用jQuery同时控制四张图片的伸缩实现代码
Apr 19 Javascript
Json实现异步请求提交评论无需跳转其他页面
Oct 11 Javascript
实现placeholder效果的方案汇总
Jun 11 Javascript
javascript背景时钟实现方法
Jun 18 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
May 07 Javascript
浅析node应用的timing-attack安全漏洞
Feb 28 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
Apr 18 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
Aug 25 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
Jun 17 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
浅谈PHP中JSON数据操作
2015/07/01 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
jquery解析xml字符串简单示例
2014/04/11 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
基于D3.js实现时钟效果
2018/07/17 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
Python中的高级数据结构详解
2015/03/27 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
Ibatis的核心配置文件都有什么
2014/09/08 面试题
过滤器的用法
2013/10/08 面试题
八年级生物教学反思
2014/01/22 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
代理词怎么写
2015/05/25 职场文书
运动员加油词
2015/07/18 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
golang使用map实现去除重复数组
2022/04/14 Golang