原生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 相关文章推荐
Extjs Gird 支持中文拼音排序实现代码
Apr 15 Javascript
JavaScript实现添加、查找、删除元素
Jul 02 Javascript
解决JavaScript数字精度丢失问题的方法
Dec 03 Javascript
Node.js实现数据推送
Apr 14 Javascript
requireJS使用指南
Apr 27 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 Javascript
Node.js笔记之process模块解读
May 31 Javascript
微信小程序左滑删除功能开发案例详解
Nov 12 Javascript
使用mixins实现elementUI表单全局验证的解决方法
Apr 02 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
Jul 10 jQuery
微信小程序实现3D轮播图效果(非swiper组件)
Sep 21 Javascript
jquery实现简单每周轮换的日历
Sep 10 jQuery
面向对象继承实例(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
一个数据采集类
2007/02/14 PHP
php处理文件的小例子(解压缩,删除目录)
2013/02/03 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
PHP中单例模式的使用场景与使用方法讲解
2019/03/18 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
vue+element-ui+axios实现图片上传
2019/08/20 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
使用Kivy将python程序打包为apk文件
2017/07/29 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
python中 * 的用法详解
2019/07/10 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
python重要函数eval多种用法解析
2020/01/14 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
基于css3仿造window7的开始菜单
2010/06/17 HTML / CSS
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
Viking比利时:购买办公用品
2019/10/30 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
思想政治教育专业个人求职信范文
2013/12/20 职场文书
小学生家长评语集锦
2014/01/30 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
导游词之峨眉山
2019/12/16 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏