我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript浏览器的兼容问题如何解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript浏览器的兼容问题如何解决

本文小编为大家详细介绍“JavaScript浏览器的兼容问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript浏览器的兼容问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

innerText 和 innerContent
1)innerText 和 innerContent 的作用相同
2)innerText IE8之前的浏览器支持
3)innerContent 老版本的Firefox支持
4)新版本的浏览器两种方式都支持

1 // 老版本浏览器兼容 innerText 和 innerContent2 if (element.textContent) {3    return element.textContent ;4  } else {5    return element.innerText;6  }

获取兄弟节点/元素的兼容性问题
 1)兄弟节点,所有浏览器都支持
        ①nextSibling 下一个兄弟节点,可能是非元素节点;会获取到文本节点
        ②previousSibling  上一个兄弟节点,可能是非元素节点;会获取到文本节点
 2)兄弟元素,IE8以前不支持

        ①previousElementSibling 获取上一个紧邻的兄弟元素,会忽略空白 
        ②nextElementSibling  获取下一个紧邻的兄弟元素,会忽略空白

//兼容浏览器// 获取下一个紧邻的兄弟元素function getNextElement(element) {  // 能力检测 if(element.nextElementSibling) {   return element.nextElementSibling;  } else {     var node = element.nextSibling;     while(node && node.nodeType !== 1) {         node = node.nextibling;     }     return node;  } }
function getPreviousElement(element) {  if(element.previousElementSibling) {    return element.previousElementSibling;  }else {    var el = element.previousSibling;    while(el && el.nodeType !== 1) {      el = el.previousSibling;      }    return el;  }}
function getFirstElement(parent) {  if(parent.firstElementChild) {    return parent.firstElementChild;  }else {    var el = parent.firstChild;    while(el && el.nodeType !== 1) {      el = el.nextSibling;      }    return el;  }}
function getLastElement(parent) {  if(parent.lastElementChild) {    return parent.lastElementChild;  }else {    var el = parent.lastChild;    while(el && el.nodeType !== 1) {      el = el.previousSibling;      }    return el;  }}
function sibling(element) {  if(!element) return ;    var elements = [ ];  var el = element.previousSibling;  while(el) {    if(el.nodeType === 1) {      elements.push(el);    }    el = el.previousSibling;  }   el = element.previousSibling;   while(el ) {    if(el.nodeType === 1) {      elements.push(el);    }    el = el.nextSibling;  }    return elements;}

array.filter();  
 // 使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组

// 兼容旧环境if (!Array.prototype.filter){ Array.prototype.filter = function(fun ) {  "use strict";  if (this === void 0 || this === null)   throw new TypeError();  var t = Object(this);  var len = t.length >>> 0;  if (typeof fun !== "function")   throw new TypeError();  var res = [];  var thisArg = arguments.length >= 2 ? arguments[1] : void 0;  for (var i = 0; i < len; i++)  {   if (i in t)   {    var val = t[i];    // NOTE: Technically this should Object.defineProperty at    //    the next index, as push can be affected by    //    properties on Object.prototype and Array.prototype.    //    But that method's new, and collisions should be    //    rare, so use the more-compatible alternative.    if (fun.call(thisArg, val, i, t))     res.push(val);   }  }  return res; };}

array.forEach();
// 遍历数组

//兼容旧环境// Production steps of ECMA-262, Edition 5, 15.4.4.18// Reference: http://es5.github.io/#x15.4.4.18if (!Array.prototype.forEach) { Array.prototype.forEach = function(callback, thisArg) {  var T, k;  if (this == null) {   throw new TypeError(' this is null or not defined');  }  // 1. Let O be the result of calling toObject() passing the  // |this| value as the argument.  var O = Object(this);  // 2. Let lenValue be the result of calling the Get() internal  // method of O with the argument "length".  // 3. Let len be toUint32(lenValue).  var len = O.length >>> 0;  // 4. If isCallable(callback) is false, throw a TypeError  exception. // See: http://es5.github.com/#x9.11  if (typeof callback !== "function") {   throw new TypeError(callback + ' is not a function');  }  // 5. If thisArg was supplied, let T be thisArg; else let  // T be undefined.  if (arguments.length > 1) {   T = thisArg;  }  // 6. Let k be 0  k = 0;  // 7. Repeat, while k < len  while (k < len) {   var kValue;   // a. Let Pk be ToString(k).   //  This is implicit for LHS operands of the in operator   // b. Let kPresent be the result of calling the HasProperty   //  internal method of O with argument Pk.   //  This step can be combined with c   // c. If kPresent is true, then   if (k in O) {    // i. Let kValue be the result of calling the Get internal    // method of O with argument Pk.    kValue = O[k];    // ii. Call the Call internal method of callback with T as    // the this value and argument list containing kValue, k, and O.    callback.call(T, kValue, k, O);   }   // d. Increase k by 1.   k++;  }  // 8. return undefined };}

注册事件
.addEventListener = function (type,listener,useCapture ) { };
//第一个参数 事件名称
//第二个参数 事件处理函数(监听者)
//第三个参数 true捕获 false冒泡
//IE9以后才支持
// 兼容旧环境

var EventTools = {    addEventListener: function (element, eventName, listener) {      //能力检测      if(element.addEventListener) {        element.addEventListener(eventName, listener,false);      }else if(element.attachEvent) {        element.attachEvent("on" + eventName, listener);      }else{        element["on" + eventName] = listener;      }    },//  想要移除事件,不能使用匿名函数    removeEventListener: function (element, eventName, listener) {      if(element.removeEventListener) {        element.removeEventListener(eventName,listener,false);      }else if(element.detachEvent) { //IE8以前注册.attachEvent和移除事件.detachEvent        element.detachEvent("on"+eventName,listener);      }else{        element["on" + eventName] = null;      }    }  };

事件对象
 1)事件参数e,就是事件对象,标准的获取方式
btn.onclick = function(e) { }
 2)e.eventPhase 事件阶段,IE8以前不支持
 3)e.target 始终是触发事件的对象(点击的按钮)
        i)IE8以前 class="lazy" data-srcElement
        ii)浏览器兼容
var target = e.target || window.event.class="lazy" data-srcElement;

// 获取事件对象 兼容浏览器 getEvent: function(e) {  return e || window.event; // e事件对象 标准的获取方式; window.event IE8以前获取事件对象的方式 }// 兼容target getTarget: function(e) {  return e.target || e.class="lazy" data-srcElement; }

获取鼠标在页面上的位置
①在可视区域中的位置:  e.clientX   e.clientY
②在文档中的位置:
        i) e.pageX      e.pageY
        ii)浏览器兼容

var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; var pageY = e.clientY + scrollTop;

获取页面滚动的距离

 // 兼容浏览器 var scrollTop = document.documentElement.scrollTop || document.body.scrolltop;

取消文本的选择

// 兼容浏览器 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();

读到这里,这篇“JavaScript浏览器的兼容问题如何解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript浏览器的兼容问题如何解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript浏览器的兼容问题如何解决

本文小编为大家详细介绍“JavaScript浏览器的兼容问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript浏览器的兼容问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、i
2023-07-04

怎么解决CSS浏览器兼容性问题

这篇文章主要介绍了怎么解决CSS浏览器兼容性问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么会有浏览器兼容性问题?还不是因为浏览器厂商太多了!Chrome,Frire
2023-06-08

教你解决Win8的IE10浏览器不兼容的问题

1、如果在打开IE10游览器预览页面,当页面不兼容的时候或者网页字体拥挤。2、可按下键盘F1编程客栈编程客栈android2调出“开发人员工具”选用IE8来游览此http://www.cppcns.com页面。3、具
2023-06-03

怎么解决各个浏览器之间的兼容问题

怎么解决各个浏览器之间的兼容问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。各个浏览器之间的兼容性问题,同样的HTML5和CSS5样式,但是浏览器表现的效果不一样。一,什
2023-06-04

HTML与IE浏览器不兼容的问题

HTML与IE浏览器不兼容的问题HTML是一种Web页面标记语言,它被广泛应用于Web开发中。然而,HTML页面在不同浏览器中的表现却大不相同,特别是在IE浏览器中,HTML页面通常会出现各种兼容性问题,导致网页无法正常显示和使用。下面将介绍HTML与IE浏览器不兼容的问题及其解决方法。1. DOCTYPE声明的问题在HTML页面中,DOCTYPE声明是用来指定Web页面的版本
2023-05-14

vue对于低版本浏览器兼容问题的解决思路

很多时候使用vue开发的项目,由于无法在低版本浏览器上运行,所以需要解决下,下面这篇文章主要给大家介绍了关于vue对于低版本浏览器兼容问题的解决思路,需要的朋友可以参考下
2023-02-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录