热门标签 | 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()})

推荐阅读
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • Tkinter Frame容器grid布局并使用Scrollbar滚动原理
    本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
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社区 版权所有