原生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 原型学习总结
Oct 29 Javascript
jquery重新播放css动画所遇问题解决
Aug 21 Javascript
JavaScript 封装一个tab效果源码分享
Sep 15 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
jQuery获取checkbox选中的值
Jan 28 Javascript
用JS中split方法实现彩色文字背景效果实例
Aug 24 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
Jul 20 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
Aug 23 Javascript
Vue中控制v-for循环次数的实现方法
Sep 26 Javascript
了解JavaScript中的选择器
May 24 Javascript
vue router动态路由设置参数可选问题
Aug 21 Javascript
关于Vue中axios的封装实例详解
Oct 20 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执行速度全攻略(上)
2006/10/09 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
React组件的三种写法总结
2017/01/12 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
Python变量作用范围实例分析
2015/07/07 Python
单利模式及python实现方式详解
2018/03/20 Python
Python应用库大全总结
2018/05/30 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
如何通过Python实现标签云算法
2019/07/02 Python
python 实现提取log文件中的关键句子,并进行统计分析
2019/12/24 Python
python mysql中in参数化说明
2020/06/05 Python
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
七年级历史教学反思
2014/02/05 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
采购员岗位职责
2015/02/03 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
2015公司年度工作总结
2015/05/14 职场文书
四大名著读书笔记
2015/06/25 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书