• js兼容性的汇总


    js兼容问题大多是在ie浏览器低版本以及ie浏览器和不同普通浏览器的差异

    事件对象

    1. document.onclick=function(ev){//谷歌火狐的写法,IE9以上支持,往下不支持;
    2. var e=ev;
    3. console.log(e);
    4. }
    5. document.onclick=function(){//谷歌和IE支持,火狐不支持;
    6. var e=event;
    7. console.log(e);
    8. }
    9. document.onclick=function(ev){//兼容写法;
    10. var e=ev||window.event;
    11. var mouseX=e.clientX;//鼠标X轴的坐标
    12. var mouseY=e.clientY;//鼠标Y轴的坐标
    13. }

    DOM节点

    1. //DOM节点相关,主要兼容IE 6 7 8
    2. function nextnode(obj){//获取下一个兄弟节点
    3. if (obj.nextElementSibling) {
    4. return obj.nextElementSibling;
    5. } else{
    6. return obj.nextSibling;
    7. };
    8. }
    9. function prenode(obj){//获取上一个兄弟节点
    10. if (obj.previousElementSibling) {
    11. return obj.previousElementSibling;
    12. } else{
    13. return obj.previousSibling;
    14. };
    15. }
    16. function firstnode(obj){//获取第一个子节点
    17. if (obj.firstElementChild) {
    18. return obj.firstElementChild;//非IE678支持
    19. } else{
    20. return obj.firstChild;//IE678支持
    21. };
    22. }
    23. function lastnode(obj){//获取最后一个子节点
    24. if (obj.lastElementChild) {
    25. return obj.lastElementChild;//非IE678支持
    26. } else{
    27. return obj.lastChild;//IE678支持
    28. };
    29. }

    document.getElementsByClassName

    1. //通过类名获取元素
    2. document.getElementsByClassName('');//IE 6 7 8不支持;
    3. //这里可以定义一个函数来解决兼容问题
    4. //第一个为全局获取类名,第二个为局部获取类名
    5. function byClass1(oClass){//全局获取,oClass为你想要查找的类名,没有“.”
    6. var tags=document.all?document.all:document.getElementsByTagName('*');
    7. var arr=[];
    8. for (var i = 0; i < tags.length; i++) {
    9. var reg=new RegExp('\\b'+oClass+'\\b','g');
    10. if (reg.test(tags[i].className)) {
    11. arr.push(tags[i]);
    12. };
    13. };
    14. return arr;//注意返回的也是数组,包含你传入的class所有元素;
    15. }
    16. function byClass2(parentID,oClass){//局部获取类名,parentID为你传入的父级ID
    17. var parent=document.getElementById(parentID);
    18. var tags=parent.all?parent.all:parent.getElementsByTagName('*');
    19. var arr=[];
    20. for (var i = 0; i < tags.length; i++) {
    21. var reg=new RegExp('\\b'+oClass+'\\b','g');
    22. if (reg.test(tags[i].className)) {
    23. arr.push(tags[i]);
    24. };
    25. };
    26. return arr;//注意返回的也是数组,包含你传入的class所有元素;
    27. }

    获取元素的非行间样式值

    1. //获取元素的非行间样式值
    2. function getStyle(object,oCss) {
    3. if (object.currentStyle) {
    4. return object.currentStyle[oCss];//IE
    5. }else{
    6. return getComputedStyle(object,null)[oCss];//除了IE
    7. }
    8. }

    设置监听事件

    1. //设置监听事件
    2. function addEvent(obj,type,fn){//添加事件监听,三个参数分别为 对象、事件类型、事件处理函数,默认为false
    3. if (obj.addEventListener) {
    4. obj.addEventListener(type,fn,false);//非IE
    5. } else{
    6. obj.attachEvent('on'+type,fn);//ie,这里已经加上on,传参的时候注意不要重复加了
    7. };
    8. }
    9. function removeEvent(obj,type,fn){//删除事件监听
    10. if (obj.removeEventListener) {
    11. obj.removeEventListener(type,fn,false);//非IE
    12. } else{
    13. obj.detachEvent('on'+type,fn);//ie,这里已经加上on,传参的时候注意不要重复加了
    14. };
    15. }

    元素到浏览器边缘的距离

    1. //在这里加个元素到浏览器边缘的距离,很实用
    2. function offsetTL(obj){//获取元素内容距离浏览器边框的距离(含边框)
    3. var ofL=0,ofT=0;
    4. while(obj){
    5. ofL+=obj.offsetLeft+obj.clientLeft;
    6. ofT+=obj.offsetTop+obj.clientTop;
    7. obj=obj.offsetParent;
    8. }
    9. return{left:ofL,top:ofT};
    10. }

    阻止事件传播

    1. //js阻止事件传播,这里使用click事件为例
    2. document.onclick=function(e){
    3. var e=e||window.event;
    4. if (e.stopPropagation) {
    5. e.stopPropagation();//W3C标准
    6. }else{
    7. e.cancelBubble=true;//IE....
    8. }
    9. }

    阻止默认事件

    1. //js阻止默认事件
    2. document.onclick=function(e){
    3. var e=e||window.event;
    4. if (e.preventDefault) {
    5. e.preventDefault();//W3C标准
    6. }else{
    7. e.returnValue='false';//IE..
    8. }
    9. }

    关于event事件中的target

    1. //关于event事件中的target
    2. document.onmouseover=function(e){
    3. var e=e||window.event;
    4. var Target=e.target||e.srcElement;//获取target的兼容写法,后面的为IE
    5. var from=e.relatedTarget||e.formElement;//鼠标来的地方,同样后面的为IE...
    6. var to=e.relatedTarget||e.toElement;//鼠标去的地方
    7. }

    鼠标滚轮滚动事件

    1. //鼠标滚轮事件
    2. //火狐中的滚轮事件
    3. document.addEventListener("DOMMouseScroll",function(event){
    4. alert(event.detail);//若前滚的话为 -3,后滚的话为 3
    5. },false)
    6. //非火狐中的滚轮事件
    7. document.onmousewheel=function(event){
    8. alert(event.detail);//前滚:120,后滚:-120
    9. }

    节点加载

    1. //火狐下特有的节点加载事件,就是节点加载完才执行,和onload不同
    2. //感觉用到的不多,直接把js代码放在页面结构后面一样能实现。。
    3. document.addEventListener('DOMContentLoaded',function ( ){},false);//DOM加载完成。好像除IE6-8都可以.

    键盘事件

    1. //键盘检测兼容
    2. function KeyC(eve){
    3. var e = eve || window.event;
    4. var keyc = e.keyCode || e.which;
    5. return keyc;
    6. }

    关于用 “索引” 获取字符串每一项出现的兼容性问题

    1. var str="abcde";
    2. aletr(str[1]);
    3. //但是低版本的浏览器 IE6,7 不兼容
    4. //兼容方法:str.charAt (i) // 全部浏览器都兼容
    5. var str="abcde";
    6. for(var i=0;ilength;i++){
    7. alert (str.charAt (i)); // 放回字符串中的每一项
    8. }

    窗口大小的兼容写法

    1. IE,Chrome: document.body.scrollTop
    2. FF: document.documentElement.scrollTop
    3. // 浏览器窗口可视区域大小(不包括工具栏和滚动条等边线)
    4. // 1600 * 525
    5. var client_w = document.documentElement.clientWidth || document.body.clientWidth;
    6. var client_h = document.documentElement.clientHeight || document.body.clientHeight;
    7. // 网页内容实际宽高(包括工具栏和滚动条等边线)
    8. // 1600 * 8
    9. var scroll_w = document.documentElement.scrollWidth || document.body.scrollWidth;
    10. var scroll_h = document.documentElement.scrollHeight || document.body.scrollHeight;
    11. // 网页内容实际宽高 (不包括工具栏和滚动条等边线)
    12. // 1600 * 8
    13. var offset_w = document.documentElement.offsetWidth || document.body.offsetWidth;
    14. var offset_h = document.documentElement.offsetHeight || document.body.offsetHeight;
    15. // 滚动的高度
    16. var scroll_Top = document.documentElement.scrollTop||document.body.scrollTop;

    创建ajax对象

    var xhr = new XMLHttpRequest()     ||    new ActiveXObject("Microsoft,XMLHTTP");
  • 相关阅读:
    计算机毕业设计Java校园疫情信息管理系统(源码+系统+mysql数据库+Lw文档)
    JavaScript基础知识11——运算符:赋值运算符
    LeetCode刷题(python版)——Topic56合并区间
    vcomp100.dll丢失的解决方法,一键修复vcomp100.dll丢失问题
    解决拦截器抛出异常处理类的500状态码Html默认格式响应 !
    有一个带头结点的单链表L,设计一个算法使其元素递增有序
    R语言和医学统计学(4):秩和检验
    Spring boot 整合grpc 运用
    H5 兼容底部地址栏、搜索栏
    solidity开发讲解
  • 原文地址:https://blog.csdn.net/m0_59962790/article/details/133151127