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()})

存在不同浏览器间的JS兼容总结的更多相关文章

  1. 浏览器间CSS样式兼容问题

    1.display:table居中显示 在chrome和safari浏览器上兼容问题 2.滤镜 在chrome浏览器中能正常显示,在360浏览器中不能正常显示 3.省略号问题 对于一行显示,基本上对所 ...

  2. 关于页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题

    需求 最近在做博客的目录功能,发现一个在现代浏览器间的一个bug,或是称之为差异,即页面滚动值(scrollTop)的获取与设定. 在此之前先说一下关于页面元素的坐标获取,这张图的经典性不必再提. 实 ...

  3. JS兼容各个浏览器的本地图片上传即时预览效果

    JS兼容各个浏览器的本地图片上传即时预览效果 很早以前 在工作曾经碰到这么一个需求,当时也是纠结了很久,也是google了很久,没有碰到合适的demo,今天特意研究了下这方面的的问题,所以也就做了个简 ...

  4. css js 兼容问题

    js  兼容问题 1. document.form.item 问题问题:代码中存在 document.formName.item("itemName") 这样的语句,不能在FF下运 ...

  5. Safari浏览器中对js Date对象的支持

    看了一下自己上一次写博客还是3月份,那是还没有毕业,实习也没那么多事情,毕业设计也才刚开始做,那时天天晚上都把电脑带回家继续学习,而现在一工作忙为借口已经不怎么进行什么知识总结了,只是在印象笔记里做做 ...

  6. 【js】IE、FF、Chrome浏览器中的JS差异介绍

    如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject  ff ...

  7. 浏览器检测(BrowserDetect.js)

    浏览器检测是在工作中经常用到的,如果只是简单判断当前是什么浏览器的话可以通过window.navigator.useragent这样的js来直接判断就可以了! 但是针对浏览器版本要求比较高的时候,如果 ...

  8. 谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!

    谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个 ...

  9. 浏览器检测(BrowserDetect.js)使用

    浏览器检测是在工作中经常用到的,如果只是简单判断当前是什么浏览器的话可以通过window.navigator.useragent这样的js来直接判断就可以了! 但是针对浏览器版本要求比较高的时候,如果 ...

随机推荐

  1. ubuntu使用iptables 持久化

    iptables 持久化 安装持久化工具apt-get install iptables-persistent Ubuntu 16.04 调用语法netfilter-persistent savene ...

  2. 最全mysql笔记整理

    mysql笔记整理 作者:python技术人 博客:https://www.cnblogs.com/lpdeboke Windows服务 -- 启动MySQL net start mysql -- 创 ...

  3. linux下安装phpunit

    安装pear 的命令如下: $ wget http://pear.php.net/go-pear.phar $ php go-pear.phar 如果报出PHP Warning:  file_exis ...

  4. MySQL索引优化(索引三表优化案例)

    建表SQL phone.book表建立索引 [关联优化查询建议] 1.保证被驱动表的join字段已经被索引 被驱动表  join 后的表为被驱动表  (需要被查询) 2.left join 时,选择小 ...

  5. python小实例

    一.跳动的心 love = '\n'.join([''.join([('love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0 ...

  6. FPGA引脚锁定 注意err和高阻状态

    1.fpga没有用的的管脚一定要设置成高阻状态设置路径如下: Assignmen->Device->Device&Pin Option->Unused pins->As ...

  7. Python安装模块包

    可以利用pycharm安装模块包 使用这种方法安装时,可能会报下面类型的异常 AttributeError: module 'pip' has no attribute 'main' 出现这这样的异常 ...

  8. du df的用法

    1,两者区别 du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在 的,没有被删除的.他计算的大小就是当前他认为存在的所有文件大小的累加和. df, ...

  9. java Character类源码分析

    一.使用 构建Character对象: public class CharTest { public static void main(String[] args) { Character c1 = ...

  10. 如何编译Java程序以及运行程序

    一.编辑运行 二.HelloWorld程序的组成: 三.public static void main(String[] args){} 四.System.out.println("Hell ...