热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS兼容总结及解决方法

本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。

2016年2月19日个人博客文章–迁移到segmentfault

当我们在编写JS用于处置惩罚事宜时,因为考虑到差别浏览器间Js代码兼容差别,代码不容易影象,因而做出以下整顿。(固然今后还会增添更新的。。。)

示例代码以下:

(1)阻挠默许事宜

obj.Onclick=function(ev){
var event=ev||window.event;
if(event.preventDefault){
event.preventDefault(); /*W3C规范*/
}else{
event.returnValue=false; /*兼容IE*/
}
}

小提示:return false; 也能阻挠默许事宜 然则要注意位置。

(2)猎取下(上)一个兄弟节点

function nextnode(obj){ /*猎取下一个兄弟节点*/
if (obj.nextElementSibling) {
return obj.nextElementSibling;
} else{
return obj.nextSibling;
}
}
function prenode(obj){ /*猎取上一个兄弟节点*/
if (obj.previousElementSibling) {
return obj.previousElementSibling;
} else{
return obj.previousSibling;
}
}

(3)猎取第一个子(末了一个)节点

function firstnode(obj){/*猎取第一个子节点*/
if (obj.firstElementChild) {
return obj.firstElementChild;/*非IE678支撑*/
} else{
return obj.firstChild;/*IE678支撑*/
}
}
function lastnode(obj){/*猎取末了一个子节点*/
if (obj.lastElementChild) {
return obj.lastElementChild;/*非IE678支撑*/
} else{
return obj.lastChild;/*IE678支撑*/
}
}

(4)增加(移除)事宜监听

function addEvent(obj,type,fn){ /*增加事宜*/
if(obj.addEventListener){
obj.addEventListener(type,fn,false); //非IE增加事宜监听
}else{
obj.attachEvent('on'+type,fn); //IE增加事宜绑定
stopEvent();
}
}
function removeEvent(obj,type,fn){ //移除事宜
if(obj.removeEventListener){
obj.removeEventListener(type,fn,false); //非IE移除事宜,移除事宜,第三个参数必需是函数名
}else{
obj.detachEvent('on'+type,fn); //IE移除事宜
}
}

(5)举例click事宜阻挠事宜流传

obj.Onclick=function(ev){
var event=ev||window.event;
alert('aa');
if(event.stopPropagation){
event.stopPropagation(); //非IE阻挠事宜流传
}else{
event.cancelBubble=true; //IE阻挠事宜流传
}
}

(6)mouseover与mouseover的事宜托付(常常用到,用于去除当 鼠标浮动到元素容器中差别子元素间涌现闪烁题目。只需在函数function(ev){} 头部增加以下代码即可)

// mouseover托付事宜
var event=ev||window.event;
// var from=event.fromElement||event.relatedTarget;
//在mouseover事宜中from,示意鼠标来自哪一个元素,也是事宜托付范例,和target与srcElement相反
// alert(from);
var from=event.fromElement||event.relatedTarget;
while(from){
if (this==from) {
return false;
};
from=from.parentNode;
}
//mouseout托付事宜
var event=ev||window.event;
var to=event.toElement||event.relatedTarget;
//在mouseout事宜中to,示意鼠标指向谁人元素,也是事宜托付范例,和target与srcElement相反
// alert(to)
while(to){
if (this==to) {
return false;
};
to=to.parentNode;
}

(7)滚轮事宜

box.Onmousewheel=function (ev){
var event=ev||window.event;
// box.innerHTML='鼠标转动'+event.wheelDelta;
if (event.wheelDelta>0) {
alert('鼠标前滚');//非火狐 前滚120
} else{
alert('鼠标后滚')//非火狐 后滚-120
};
}*/
box.addEventListener('DOMMouseScroll',function (ev){
var event=ev||window.event;
alert(event.detail);//火狐前滚:-3 ,后滚:3
},false)//IE678不支撑

8.js按需加载 异步加载
demo.js以下

function test() {
console.log('hello');
}

index.html以下

function loadScript(url,callback){
var script=document.createElement('script');
script.type='text/Javascript';
if(script.readyState){ //ie
script.Onreadystatechange=function(){
if(script.readyState=='complete'||script.readyState=='loaded'){
callback()
}
}
}else{
script.Onload=function(){ //Safari chrome firefox opera ----Ie script不具备onload要领
callback();
}
}
script.src=url; //写在这里是为了防备onreadystatechange状况不转变
document.head.appendChild(script)
}
loadScript('demo.js',function(){test()})

推荐阅读
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文详细介绍如何使用 HTML5 和 JavaScript 实现一个交互式的画板功能。通过具体代码示例,帮助读者理解 Canvas API 的基本用法及其在绘图应用中的实际应用。 ... [详细]
  • 本文将探讨Java编程语言中对象和类的核心概念,帮助读者更好地理解和应用面向对象编程的思想。通过实际例子和代码演示,我们将揭示如何在Java中定义、创建和使用对象。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 V2017.11
    雨林木风 GHOST XP SP3 经典珍藏版 V2017.11 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 12月16日JavaScript变量、函数、流程、循环等***线上九期班
    12月16日JavaScript变量、函数、流程、循环等***线上九期班 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
author-avatar
九橙seven
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有