原生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自动生成包含数字与字符的随机字符串
Feb 09 Javascript
jQuery Validation PlugIn的使用方法详解
Dec 18 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
Dec 22 Javascript
JS简单实现无缝滚动效果实例
Aug 24 Javascript
Bootstrap表单简单实现代码
Mar 06 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
Mar 09 Javascript
vue.js响应式原理解析与实现
Jun 22 Javascript
JavaScript中AOP的实现与应用
May 06 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
Dec 15 Javascript
jQuery实现获取多选框的值示例
Feb 07 jQuery
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
Vue.js中使用Vuex实现组件数据共享案例
Jul 31 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 SPL使用方法和他的威力
2013/11/12 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
python+pyqt实现右下角弹出框
2017/10/26 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
Python3进制之间的转换代码实例
2019/08/24 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
python爬虫基础知识点整理
2020/06/02 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
深入了解Python enumerate和zip
2020/07/16 Python
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
保护环境建议书
2014/03/12 职场文书
建房协议书
2014/04/11 职场文书
节约用水的口号
2014/06/20 职场文书
出租房屋协议书
2014/09/14 职场文书
英文产品推荐信
2015/03/27 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL