首先:如何处理兼容问题

1.如果两个都是属性,用逻辑||做兼容

2.如果有一个是方法,用三元做兼容

3.如果是多个属性或方法,封装函数做兼容

分享两个小知识点:

1、取消拖拽的默认行为:

document.ondragstart = function(){

  return false

}

2、阻止右键菜单的默认行为:

document.oncontextmenu = function(){

  return false

}

开始兼容问题:

一、运用逻辑运算符||做的相关兼容

1、关于获取滚动高度的不兼容问题

var scrollTop=documentElement.scrollTop

var scrollTop=document.body.scrollTop(chrome写法)

兼容写法:

var scrollTop = document.documentElement.scrollTop||document.body.scrollTop

2、关于获取事件对象的兼容:

function (eve){

  var e = eve || window.event

}

3、获取键盘编码的兼容:

function (eve){

  var e = eve || window.event

  var keyValue = e.keyCode || e.charCode || e.which

}

4、关于事件委托获取事件源的兼容问题:

function (eve){

  var e = eve || window.event

  var target = e.target || e.srcElement

}

二、运用三元表达式做的兼容

1、阻止事件冒泡的兼容

function (eve){

  var e = eve || window.event

  e.stopPropagation ? e.stopPropagation : e.cancleBubble = true;

}

2、阻止超链接的默认行为:

oA.onclick = function (eve){

  var e = eve || window.event

  e.preventDefault ? e.preventDefault() : e.returnValue = false

}

三、运用方法进行兼容的问题:

1、添加事件监听:

function addEventListener(obj,event,fn,boo){

if(obj.addEventListener){

obj.addEventListener(event,fn,boo);

}else{

    obj.attachEvent("on" + event,fn);

  }

}

运用:

addEventListener(oBtn,"click",fn1,false);

addEventListener(oBtn,"click",fn2,false);

addEventListener(oBtn,"click",fn3,false);

2、移除事件监听:

function removeEventListener(obj,evt,fn,boo){

if(obj.removeEventListener){

    obj.removeEventListener(evt,fn,boo);

}else{

    obj.detachEvent("on" + evt,fn);

  }

}

removeEventListener(oBtn,"click",fn2,false);

3、获取鼠标键值的兼容:(event.button)

function getbutton(eve){

  var e = eve || window.event;

  if(eve){//判断是否为标准浏览器

  return e.button

}else if(window.event){//判断是不是IE

switch(e.button){

case 1 :  return 0;

case 4 :  return 1;

case 2 :  return 2;

}}}

二:关于使用getAttribute获取className不兼容的问题

<div id="box1"></div>

var oBox=document.getElementById("box1")

(1)console.log(oBox.getAttribute("className"))//标准浏览器不支持,ie7支持

(2)console.log(oBox.getAttribute("class")//标准浏览器支持,ie7不支持

兼容写法:

function fn(obj){

if(obj.getAttribute("class"))==null{

return obj.getAttribute("className");

}else{

 return obj.getAttribute("class")

}

};

三:关于getElementsByClassName("class属性名称")的不兼容问题;

console.log(obj.getElementsByClassName("class属性名称"))//标准浏览器支持,ie8以下不支持

兼容写法:

function fn(obj.class属性名称){

if(obj.getElementsByClassName){

return   obj.getElementsByClassName(className);

}else{

var list = [];

var arr = obj.getElementsByTagName(*)//上一步是获取页面所有的标签元素

for(var i = 0;i < arr.length;i ++){

if(arr[i].className == className){

list.push(arr[i]);

}

}

return list;}}

遍历所有元素,找出class名为指定名字的元素

四: 关于处理空白文本节点的问题

1.忽略空白文本节点

function fn(nodes){

var arr = [];

for(var i = 0;i < nodes.length;i ++){

if(nodes[i].nodeType === 3 &&

/^\s+$/.test(nodes[i].nodeValue)){

continue;

}else{

arr.push(nodes[i]);

}}    return arr;}

2.删除空白文本节点:

function fn(nodes){//nodes;所有的子节点

for(var i = 0;i < nodes.length;i ++){

if(nodes[i].nodeType === 3 &&

/^\s+$/.test(nodes[i].nodeValue)){

nodes[i].parentNode.removeChild(nodes[i]);}}

return nodes

}

3.移除空白节点

function fn(node){//node:父节点

var childs = node.childnodes;//获取所有子节点

for(var i = 0;i < childs.length;i ++){

if(childs[i].nodeType === 3 &&

/^\s+$/.test(childs[i].nodeValue)){

node.removeChild(childs[i]);}}

return node;

}

五:获取非行内样式的兼容写法

function getStyle(obj,attr){

return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,true)[attr];

}

attr:是属性;比如

<style>#box{width:100px;}</style>

<div id = box></div>

<script>

var oBox = document.getElementById("box");

function getStyle(obj,attr){

return obj.currentStyle ?       obj.currentStyle[attr] :      getComputedStyle(obj,true[attr];

};

var s = getStyle(oBox,"width");

alert(s);

</script>

如何处理使用js兼容所有浏览器的问题的更多相关文章

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

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

  2. js兼容各个浏览器的复制功能

    看似简单的复制功能,用js做起来竟然遇到各种情况.刚开始在网上搜索到复制功能的几种实现方法,但是都不兼容.最后还是用的插件代码如下 html模板 <tr> <td>1</ ...

  3. JS兼容IE浏览器的方法

    背景 系统需要兼容蛋疼的IE6... 解决方案 *{ 兼容IE6-8 }* <!--[if lt IE 9]> <script src="@{'/public/mng/ja ...

  4. js兼容多浏览器的关闭当前页面

    关闭当前页面,相信不少人在开发中都遇到过这个需求,但面对这么多的浏览器,要做到js的兼容还需要做特殊的处理.关于这方面网上有很多的资料,但大多都是复制粘贴的,没有达到兼容的效果,或者是效果不好. 下面 ...

  5. 调用iframe 中的js[兼容各种浏览器]

    *chrome浏览器需要在服务器环境中测试 <!DOCTYPE html> <html> <head> <meta http-equiv="cont ...

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

    在firefox\chrome\ie10等浏览器中可以使用HTML5中的内容实现图片即时预览效果,在IE10以下浏览器中使用滤镜来解决图片显示问题. HTML5中的FileReader对象主要是把文件 ...

  7. ZeroClipboard.js兼容各种浏览器复制到剪切板上

    http://www.cnblogs.com/huijieoo/articles/5569990.html <script type="text/javascript" sr ...

  8. JS兼容所有浏览器的一段加入收藏代码,设置为首页

    <script language="javascript" type="text/javascript"> function addfavorite ...

  9. JS获取回车事件(兼容各浏览器)

    一.用到onkeydown获取事件动作, 二.用到键盘对应代码keyCode, 三. var event=arguments.callee.caller.arguments[0]||window.ev ...

随机推荐

  1. python 小白(无编程基础,无计算机基础)的开发之路 day1

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  2. Python - SIP参考指南 - 介绍

    介绍 本文是SIP4.18的参考指南.SIP是一种Python工具,用于自动生成Python与C.C++库的绑定.SIP最初是在1998年用PyQt开发的,用于Python与Qt GUI toolki ...

  3. STM32F4中USB与PC双向通信

    STM32F4系列处理器内部集成了USB-OTG控制器,在不要外部USB IC下就可以实现USB通信,最近两天看了下如何利用STM32的USB实现通信,记录下关键步骤: 1. 从http://www. ...

  4. ThinkPHP中浏览器友好输出函数

    // 环境常量 define('IS_CLI', PHP_SAPI == 'cli' ? true : false); define('IS_WIN', strpos(PHP_OS, 'WIN') ! ...

  5. JAVA基础面试(一)

    1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...

  6. Chapter 8: Exceptional Control Flow

    概述: 我们可以用一种“流”的概念来理解处理器的工作流程,PC(Program Counter)依次为a0,a1,a2,...,an-1,这个序列可以称作control flow.当然我们并不总是按顺 ...

  7. 【Win 10 应用开发】UI Composition 札记(八):用 XamlLight 制作灯光效果

    前面老周已介绍过灯光的使用,如果你忘了,请用九牛二虎之力猛点击这里去复习一下.本篇老周再介绍另一种添加灯光的方法,这种方法是专为 XAML 元素而设计的,可以很方便地为可视化元素添加灯光效果. 不知道 ...

  8. 【机器学习】DNN训练中的问题与方法

    感谢中国人民大学的胡鹤老师,人工智能课程讲的很有深度,与时俱进 由于深度神经网络(DNN)层数很多,每次训练都是逐层由后至前传递.传递项<1,梯度可能变得非常小趋于0,以此来训练网络几乎不会有什 ...

  9. Javascript-基础概念总结

    [作用域]javascript中的作用域可以理解为一个语句执行的环境大小,有全局的作用域,函数作用域和eval作用域.在JS中没有块级作用域.讲到作用域,不得不讲执行环境,执行环境在JS中是最为重要的 ...

  10. 认识 Less

    CSS(层叠样式表)是一项出色的技术,它使得网页的表现与内容完全分离,使网站维护工作变得更容易,不会因为内容的改变而影响表现,也不会因为表现的改变而影响内容. 作为一门标记性语言,CSS 的先天性优点 ...