原生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 相关文章推荐
jquery validator 插件增加日期比较方法
Feb 21 Javascript
减少访问DOM的次数提升javascript性能
Feb 24 Javascript
我的Node.js学习之路(四)--单元测试
Jul 06 Javascript
extjs 分页使用jsp传递数据示例
Jul 29 Javascript
jquery使用$(element).is()来判断获取的tagName
Aug 24 Javascript
node.js中的fs.write方法使用说明
Dec 15 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
开启BootStrap学习之旅
May 04 Javascript
javascript执行环境及作用域详解
May 05 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
Angular4表单验证代码详解
Sep 03 Javascript
JS栈stack类的实现与使用方法示例
Jan 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
MySQL中create table语句的基本语法是
2007/01/15 PHP
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
PHP实现文件下载详解
2014/11/27 PHP
php数组添加元素方法小结
2014/12/20 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
学习ExtJS Window常用方法
2009/10/07 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
5种Python单例模式的实现方式
2016/01/14 Python
python调用fortran模块
2016/04/08 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
护士自我鉴定范文
2013/10/06 职场文书
机械设计及其自动化专业推荐信
2013/10/31 职场文书
请假条范文大全
2014/04/10 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
2014年副班长工作总结
2014/12/10 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
基于Python实现一个春节倒计时脚本
2022/01/22 Python