JS 兼容性方法小结

发布于 2021-11-27 11:55:01 字数 2604 浏览 973 评论 0

事件

事件对象兼容

ie/chrome : event是一个内置全局对象
标准下 : 事件对象是通过事件函数的第一个参数传入
兼容写法 :   ev = ev||event;

取消事件冒泡兼容

IE8: cancelBubble = true;
非IE: ev.stopPropagation();

阻止默认事件

IE8: 在事件方法尾部 return false;//注意该方法还会阻止冒泡
非IE:    ev.preventDefault();

事件监听兼容

function bindEvent(obj,event,callback){
  if(obj.addEventListener){
    //标准下
    obj.addEventListener(event,callback,false);
  }else{
    //非标准下
    obj.attachEvent('on'+event,function(){  
      callback.call(obj);
    });
  }
}

DOM

children 属性

元素.children : 只读 属性 子节点列表集合
标准下:只包含元素类型的节点
非标准下:只包含元素类型的节点,ie7以下不会包含非法嵌套子节点

parent 节点读取方法

元素.parentNode : 只读 属性 当前节点的父级节点 兼容性很好
元素.offsetParent : 只读 属性 离当前元素最近的一个有定位属性的父节点
该属性判断父级的几个点:
如果没有定位父级,默认是body
ie7以下,如果当前元素没有定位默认是body,如果有定位则是html
ie7以下,如果当前元素的某个父级触发了layout,那么offsetParent就会被指向到这个触发了layout特性的父节点上

Layout 是 ie7 以下特性 
是否有Layout特性 :  
doucument.getElementById('').currentStyle.hasLayout;
//true:有 false:没有
alert(document.getElementById('div2').currentStyle.hasLayout );

判断所选元素到 body 的距离:

function getPos(obj)
{
  var pos={left:0,top:0};
  while(obj)
  {
    pos.left += obj.offsetLeft;
    pos.top += obj.offsetTop;
    obj=obj.offsetParent;
  }
  return pos;

}

滚动条距离

//滚动条滚动距离
document.documentElement.scrollTop //非chrome
document.body.scrollTop //chrome
//兼容性方案
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

获取行间样式

function getStyle(obj,name){
  if(obj.currentStyle){
    //IE
    return obj.currentStyle[name];
  }else{
    //标准
    return getComputedStyle(obj,false)[name];
  }
}

AJAX

function ajax(method, url, data, successFn){
  url = (method === 'get') && data ? url+'?'+data : url;
  new xhr = null;
  try {
    xhr = new XMLHttpRequest();
  } catch (e) {
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
  }

  xhr.open(method,url,true);

  if( method === 'get' ){
    xhr.send();
  }else{
    xhr.setRequestHeader('content-type','application/x-www-form-urlencode');
    xhr.send(data);
  }

  xhr.onreadystatechange = function(){
    if( xhr.readyState == 4){
      if(xhr.status === 200){
        successFn&&successFn(xhr.responseText);
      }else{
        alert( '出错了,Err:' + xhr.status + '错误');
      }
    }
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

拥有

暂无简介

0 文章
0 评论
743 人气
更多

推荐作者

束缚m

文章 0 评论 0

alipaysp_VP2a8Q4rgx

文章 0 评论 0

α

文章 0 评论 0

一口甜

文章 0 评论 0

厌味

文章 0 评论 0

转身泪倾城

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文