原生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 页面刷新location.reload和location.replace的区别小结
Dec 24 Javascript
JavaScript中为元素加上name属性的方法
May 09 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
简单谈谈javascript Date类型
Sep 06 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
Jan 12 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 Javascript
JavaScript中split与join函数的进阶使用技巧
May 03 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
May 05 Javascript
js实现前端分页页码管理
Jan 06 Javascript
vue-star评星组件开发实例
Mar 01 Javascript
JS构造一个html文本内容成文件流形式发送到后台
Jul 31 Javascript
解决Vue使用swiper动态加载数据,动态轮播数据显示白屏的问题
Sep 27 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生成网页快照 不用COM不用扩展.
2010/02/11 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php自动载入类用法实例分析
2016/06/24 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
转一个日期输入控件,支持FF
2007/04/27 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
validator验证控件使用代码
2010/11/23 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
python 将字符串转换成字典dict
2013/03/24 Python
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
微信跳一跳python辅助软件思路及图像识别源码解析
2018/01/04 Python
python版飞机大战代码分享
2018/11/20 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
python字符串下标与切片及使用方法
2020/02/13 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
应届生求职信
2014/05/31 职场文书
植树造林的宣传标语
2014/06/23 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
用Python实现屏幕截图详解
2022/01/22 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技