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

推荐阅读
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 在使用 MUI 框架进行应用开发时,开发者常常会遇到 mui.init() 和 mui.plusReady() 这两个方法。本文将详细解释它们的区别及其在不同开发环境下的应用。 ... [详细]
  • 在 ExtJS 中,类的别名(alias)是开发过程中非常有用的一个特性。通过别名,开发者可以使用简短且易于记忆的名称来引用复杂的类名。本文将详细探讨如何在 ExtJS API 中使用和定义别名,并提供实例说明。 ... [详细]
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社区 版权所有