原生javascript兼容性测试实例

 更新时间:2013年07月01日 17:17:54   作者:  
原生javascript兼容性:currentStyle、scrollTop、event以及绑定事件IE的绑定事件为attachEvent/detachEvent等等兼容性测试实例,感兴趣的朋友可以参考下哈
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.

相关文章

  • 基于canvas实现超炫酷的流水灯效果

    基于canvas实现超炫酷的流水灯效果

    这篇文章主要为大家详细介绍了基于canvas实现超炫酷的流水灯效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Javascript数组常用方法你都知道吗

    Javascript数组常用方法你都知道吗

    这篇文章主要为大家详细介绍了Javascript数组常用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 关于meta viewport中target-densitydpi属性详解(推荐)

    关于meta viewport中target-densitydpi属性详解(推荐)

    这篇文章主要介绍了关于meta viewport中target-densitydpi属性详解,通过不同的缩放比例实现了不同的预览效果,具体操作步骤大家可查看下文的详细讲解,感兴趣的小伙伴们可以参考一下。
    2017-08-08
  • JavaScript实现的XML与JSON互转功能详解

    JavaScript实现的XML与JSON互转功能详解

    这篇文章主要介绍了JavaScript实现的XML与JSON互转功能,结合实例形式分析了基于javascript的xml与json相关转换功能实现技巧,需要的朋友可以参考下
    2017-02-02
  • 8个绝妙的JS字符串处理技巧分享

    8个绝妙的JS字符串处理技巧分享

    当处理JavaScript字符串时,有许多有趣的技巧可以提高你的编码效率,这篇文章将介绍一些有关JavaScript字符串的技巧,让你在字符串操作方面更加娴熟
    2023-10-10
  • 对layui数据表格动态cols(字段)动态变化详解

    对layui数据表格动态cols(字段)动态变化详解

    今天小编就为大家分享一篇对layui数据表格动态cols(字段)动态变化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 浅析js中事件冒泡与事件捕获

    浅析js中事件冒泡与事件捕获

    js中事件冒泡、事件捕获一直都是困扰大家的问题,本文利用大量代码解释了js中事件冒泡与事件捕获,希望对小伙伴们有所帮助
    2021-08-08
  • 微信小程序拍照和摄像功能实现方法示例

    微信小程序拍照和摄像功能实现方法示例

    这篇文章主要介绍了微信小程序拍照和摄像功能实现方法,结合实例形式分析了微信小程序拍照与摄影功能的原理、相关实现技巧与注意事项,需要的朋友可以参考下
    2019-02-02
  • javascript中cookie对象用法实例分析

    javascript中cookie对象用法实例分析

    这篇文章主要介绍了javascript中cookie对象用法,实例分析了javascript针对cookie对象的写入、读取及删除等操作的使用方法,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • (跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享

    (跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享

    一些js代码,自己备用的,高手不要笑话我。(跨浏览器基础事件,浏览器检测,判断浏览器的名称、版本号、操作系统)等等,很实用的,方便自己使用,感兴趣的朋友可以了解下,希望本文对你有所帮助
    2013-01-01

最新评论