JavaScript常见火狐Firefox、IE浏览器兼容问题

1、关于event的用法

IE 中可以直接使用 event 对象,而 FF 中则不可以

解决方法一:
var theEvent = window.event || arguments.callee.caller.arguments[0];

解决方法二:是将 event 作为参数来传递
function xxx(e){var theEvent = window.event || e;}

2、事件对象获取

IE:event.srcElement

Mozilla:event.target

Mozilla下的e.target相当于ie下的event.srcElement

但细节上有区别

IE 中 srcElement 表示产生事件的源,比如是哪个按钮触发的 onclick 事件,返回一个Html Element

FF 中则是 target,返回的是个节点,也就是说包括文本节点

3、键盘值的取得

Mozilla:event.which

IE:event.keyCode

4、取鼠标点击的绝对位置

IE:event.x、event.y

Mozilla:event.pageX、event.pageY

5、取鼠标点击的相对位置

IE:event.offsetX、event.offsetY

Mozilla:event.pageX、event.pageY

6、事件绑定

IE:attachEvent、detatchEvent

Mozilla:addEventListener、removeEventListener

7、事件冒泡、事件捕获、默认事件

这两个概念都是为了解决页面中事件流(事件发生顺序)的问题。

<div id="outer">

    <p id="inner">Click me!</p>

</div>

事件冒泡(event bubbling):微软——事件会从最内层的元素开始发生,一直向上传播,直到document对象,p -> div -> body -> html -> document

事件捕获(event capturing):网景——与事件冒泡相反,事件会从最外层开始发生,直到最具体的元素,document -> html -> body -> div -> p

阻止事件冒泡、捕获的方法:e.stopPropagation();

阻止默认事件发生的方法:e.preventDefault();

addEventlistener默认false冒泡事件,true捕获事件

阻止事件冒泡:

在微软的模型中,你必须设置事件的cancelBubble的属性为true

window.event.cancelBubble = true

在w3c模型中,你必须调用事件的stopPropagation()方法

e.stopPropagation()

兼容解决方法:

function doSomething(e)

{

if (!e)

{

var e = window.event;

e.cancelBubble = true;

}

if (e.stopPropagation){

e.stopPropagation();

}

}

8、获取元素属性getAttribute

在Firefox中getAttribute(“onsubmit”)返回值是一个字符串,也就是一个函数,因此如果在IE中处理onsubmit,我们可以直接调用这个函数

在IE中的返回值类型则是function,因此就不能直接这样使用了,而应该将字符串转换成函数再去调用,使用new Function将字符串转换成函数

var vaf = new Function(document.getElementById(“test”).getAttribute(“onsubmit”));

兼容解决方法:

function validate() {
        var vaf=document.getElementById(“test”).getAttribute(“onsubmit”);
        vaf = typeof(vaf) == ”string” ? new Function(vaf) : vaf;
        if(vaf())
            alert(“OK”);
        else
            alert(“Error”);
    }

DOM篇

1、删除节点
IE:removeNode

例:<input type="button" value="clickMe" id="myButton">

document.getElementById("myButton").removeNode()

Mozilla中,没有这个方法,只能是先找到父节点,然后调用Dom方法removeChild才可以达到目的

例:<input type="button" value="clickMe" id="myButton">

var Node = document.getElementById("myButton");

oNode.parentNode.removeChild(oNode);

2、关于innerHTML和innerText

innerText:

浏览器支持:IE、Chrome

赋值操作:先将ASCII实体对应的字符(<、>、&、‘和")转换为实体名,然后把处理后的值赋予给innerHTML属性。

取值操作:innerText的取值实际上就是对innerHTML的属性值进行一系列处理,然后返回,具体步骤如下

1. 对HTML标签进行解析;

2. 对CSS样式进行带限制的解析和渲染;

3. 将ASCII实体转换为对应的字符;

4. 剔除格式信息(如\t \r和\n等),将多个连续的空格合并为一个。

浏览器效果并不统一

textContent:             

浏览器支持:IE9~11、FireForx、Chrome

赋值操作:先将ASCII实体对应的字符(<、>、&、‘和")转换为实体名,然后把处理后的值赋予给innerHTML属性。

取值操作:textContent的取值实际上就是对innerHTML的属性值进行一系列处理,然后返回,具体步骤如下

1. 对HTML标签进行剔除;

2. 将ASCII实体转换为相应的字符。

注意:

a). 对HTML标签是剔除不是解析,也不会出现CSS解析和渲染的处理,因此<br/>等元素是不生效的。

b). 不会剔除格式信息和合并连续的空格,因此\t、\r、\n和连续的空格将生效。

所有浏览器效果统一

(上述的关系和行为仅限于非表单元素)

时间: 2024-11-13 08:51:46

JavaScript常见火狐Firefox、IE浏览器兼容问题的相关文章

常见的几个浏览器兼容问题

所谓的浏览器兼容性问题,是指因为不同的浏览器对同?段代码有不同的解析,造成页?显示效果不统一的情况. 兼容问题一:块属性标签float后,?有横?的margin情况下,在IE6显?margin比设置的? 出现问题:IE6中后面的?块被顶到下一? 解决?案:在float的标签样式控制中加入 display:inline;将其转化为?内属性 兼容问题二:?内属性标签,设置display:block后采用float布局,又有横?的margin的情况,IE6间距bug出现问题:IE6?的间距比超过设置的

Javascript页面跳转与浏览器兼容

用<meta>标签实现的定时跳转: <meta http-equiv="refresh" content="5 url=http://www.baidu.com"> 现在也在很多系统中用于实现定时跳转,它最大的问题是在Chrome浏览器中无法正常运行(有人说可以,但至少我试了两个版本的chrome,都无法正常跳转). 解决方法是用Javascript取而代之.一种简单的办法是先定义一个函数,作用是执行跳转操作,然后通过setTimeout函数

常见的浏览器兼容问题和解决方法

为什么会有兼容问题? 由于市场上浏览器种类众多,而不同浏览器其内核亦不尽相同,所以各个浏览器对网页的解析就有一定出入,这也是导致浏览器兼容问题出现的主要原因,我们的网页需要在主流浏览器上正常运行,就需要做好浏览器兼容. 使用Trident内核的浏览器:IE.Maxthon.TT: 使用Gecko内核的浏览器:Netcape6及以上版本.FireFox: 使用Presto内核的浏览器:Opera7及以上版本: 使用Webkit内核的浏览器:Safari.Chrome. 而我现在所说的兼容性问题,主

常见浏览器兼容问题及解决技巧

首先我们应该了解一下为什么会有兼容问题? 由于市场上浏览器种类众多,而不同浏览器其内核亦不尽相同,所以各个浏览器对网页的解析就有一定出入,这也是导致浏览器兼容问题出现的主要原因,我们的网页需要在主流浏览器上正常运行,就需要做好浏览器兼容. 使用Trident内核的浏览器:IE.Maxthon.TT: 使用Gecko内核的浏览器:Netcape6及以上版本.FireFox: 使用Presto内核的浏览器:Opera7及以上版本: 使用Webkit内核的浏览器:Safari.Chrome. 而我现在

JavaScript初学者建议:不要去管浏览器兼容

如果可以回到过去的话,我会告诉自己这句话:"初学JavaScript的时候无视DOM和BOM的兼容性" 我初学时的处境 在我初学JavaScript的时候最头痛的就是浏览器兼容问题.在Firefox下面好好的代码放到IE就不能显示了,又或者是在IE能正常显示的代码在firefox又报错了. 前端开发工程师的职责就包括跨浏览器开发.所以我就在还不了解JS这门语言本身的时候去花时间学习浏览器兼容知识,这样会让JS学习难度增加.但是不能兼容主流浏览器的代码不能用在实际项目中. DOM和BOM

常用的兼容IE和火狐FF等浏览器的js方法(js中ie和火狐的一些差别)

介绍了网页上常用的IE/火狐兼容性该页的做法,并给出了代码,相当实用了.为了方便大家阅读代码,以下以 IE 代替 Internet Explorer,以 MF/FF 代替 Mozzila Firefox .以下进入正题: //window.event IE:有window.event对象 FF:没有window.event对象.可以通过给函数的参数传递event对象.如onmousemove=doMouseMove(event) 解决方法:var event = event || window.

上传图片带预览功能兼容IE和火狐等主流浏览器

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

常用的兼容IE和火狐FF等浏览器的js方法

这是一篇收集的文档,介绍了网页上常用的IE/火狐兼容性该页的做法,并给出了代码,相当实用了.为了方便大家阅读代码,以下以 IE 代替 Internet Explorer,以 MF/FF 代替 Mozzila Firefox .以下进入正题: //window.event IE:有window.event对象 FF:没有window.event对象.可以通过给函数的参数传递event对象.如onmousemove=doMouseMove(event) 解决方法:var event = event

使用absolute模拟fixed定位,兼容ie6,及ie7 8 9和火狐谷歌等浏览器

ie6不支持fixed定位,设定fixed定位后,ie6会认为是错误值,便会使用默认值static,可以使用absolute模拟fixed效果,并且兼容ie 7 8 9以及火狐等. 核心代码:    html,body {        margin: 0;        padding: 0;        height: 100%;    }    html { overflow: hidden; }    body { overflow: auto;}    #demo { positio