javascript(js)和css兼容IE和FireFox(FF)
js和css兼容IE和FireFox(FF)
css:
1.
ul标签中FF中有个padding值,却没有margin值,而在IE中正好相反
解决办法:将ul的padding和margin都设为0(也可以不是0)如:padding:0;margin:0;list-style:none;
另外form默认在IE中也会有margin值,所以最好也将其margin和padding设为0
2.
ie中cursor:hand可以将鼠标设为手形,FF不行,
解决:都用cursor:pointer
3、居中问题
ie需要将父窗口:text-align:center;而ff则是margin-left:auto;margin-right:auto;
4.IE和FF盒模型有区别,所以有需要特殊设置
IE Box的总宽度是: width+padding+border+margin宽度总和
FF Box的总宽度就是 width的宽度,padding+border+margin的宽度在含在width内。
FF: 支持 !important(优先解析), IE 则忽略, 可用 !important 为 FF 特别设置样式
width:600px !important;//这个要放在前面才行
width:598px;
另外:传说IE7会奇怪的支持!important,试过却不行;
5.
IE6中在设置float的div中margin会加倍,解决办法:div里面加上display:inline;
6.透明滤镜:
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=30);
FF:opacity:0.3;
或者:
IE:filter:alpha(opacity=60);
FF:-moz-opacity:0.6;/*已过时,用上面的opacity代替*/
7.禁用选择
IE:使用js,onselectstart="return false;";
FF:使用CSS,-moz-user-select:none;
8:圆角:
FF中:-moz-border-radius:4px;
js:
1.
IE中innerText在FF中没有,使用textContent;
eg:
var obj=document.getElementById("_td");
var text;
if(obj.innerText) {
text=obj.innerText;
} else if(obj.textContent) {
text=obj.textContent;
}
(DHTML手册说innerText不能用在tr,td等节点上,不过我之前明明用过的,然后昨天在测试别人的页面时用上面的方法IE取不到值,有哪位知道的希望告知下,在什么情况下不能使用innerText)
2.
在Ajax中返回对象状态IE可以使用readystate但是在FF中必须为readyState,所以最好是都写成readyState
3.获取IE和FF中的键盘返回值,<input type="text" onkeyUp="test(event)"/>
function test(e) {
var keyc=GetKeyCode(e);
alert(keyc);
}
function GetKeyCode(e) {//取得不同浏览器下的键盘事件值
var keyc;
if(window.event) {//ie键盘事件
keyc=e.keyCode;
} else if (e.which) {//火狐
keyc=e.which;
}
return keyc;
}
4.为对象添加移除事件
var obj=document.getElementById("_tname');
添加事件:
if(obj.attachEvent) {
obj.attachEvent("onchange",function() {
otherfunction(params);//这里可以给其实方法传参,也可以直接调用其它方法
});
} else if(obj.addEventListener) {
obj.addEventListener("change",function() {
otherfunction(params);
},false);
}
移除事件:
obj.onclick=null;
/*下面的代码为什么不行,IE下输出obj.onclick竟然为anonymous,希望高手能帮忙解决
if(obj.detachEvent) {
obj.detachEvent("onchange",test);
} else if(obj.removeEventListener) {
obj.removeEventListener("change",test,false);
}*/
5.
IE中event.x和event.y
在FF中只有event.pageX,event.pageY
都有event.clientX和event.clientY属性
解决办法:
var x=e.x?e.x:e.pageX;//e为event对象传进来的参数
6.IE下 input.type属性为只读,但是MF下可以修改
7.在 IE 中,getElementsByName()、(document.all[name] (还未测试成功))均不能用来取得 div元素(是否还有其它不能取的元素还不知道)。
8.通过js来触发事件
<script type="text/javascript">
function handerToClick(){
var obj=document.getElementById("btn1");
if(document.all){//IE中
obj.fireEvent("onclick");
} else {
var e=document.createEvent('MouseEvent');
e.initEvent('click',false,false);
obj.dispatchEvent(e);
}
}
</script>
<input type="button" value="btn1" id="btn1" onclick=" alert('按钮btn1的click事件') " />
<input type="button" value="触发ID为btn1的onclick事件" onclick=" handerToClick() " />
9.IE下event对象有srcElement属性,Firefox下,event对象有target属性
e = e||window.event;
if(e==null)//当事件在iframe中时为空
e=window.top.document.parentWindow.event;
var obj=e.srcElement || e.target;
10.在FF中自己定义的属性必须getAttribute()取得
11.在FF中,Ajax不能同步调用,只能使用异步方法
xhttp.open("GET",url,bAsync || navigator.appName=="Netscape");//当在FF下时就只能异步 回传了
12.FF下没有insertAdjacentHTML问题
两种解决办法,在如果在iframe中只能使用后一种:
①
IAHTML:function(){//insertAdjacentHTML by BlueDestiny ^_^
if(document.body.insertAdjacentHTML){return;}
HTMLElement.prototype.insertAdjacentHTML = function(sWhere, sHTML){
var df = null,r = this.ownerDocument.createRange();
switch (String(sWhere).toLowerCase()) {
case "beforebegin":
r.setStartBefore(this);
df = r.createContextualFragment(sHTML);
this.parentNode.insertBefore(df, this);
break;
case "afterbegin":
r.selectNodeContents(this);
r.collapse(true);
df = r.createContextualFragment(sHTML);
this.insertBefore(df, this.firstChild);
break;
case "beforeend":
r.selectNodeContents(this);
r.collapse(false);
df = r.createContextualFragment(sHTML);
this.appendChild(df);
break;
case "afterend":
r.setStartAfter(this);
df = r.createContextualFragment(sHTML);
this.parentNode.insertBefore(df, this.nextSibling);
break;
}
};
}(),
②
insertHtml:function(where, el, html){
where = where.toLowerCase();
if(el.insertAdjacentHTML){
switch(where){
case "beforebegin":
el.insertAdjacentHTML('BeforeBegin', html);
return el.previousSibling;
case "afterbegin":
el.insertAdjacentHTML('AfterBegin', html);
return el.firstChild;
case "beforeend":
el.insertAdjacentHTML('BeforeEnd', html);
return el.lastChild;
case "afterend":
el.insertAdjacentHTML('AfterEnd', html);
return el.nextSibling;
}
throw 'Illegal insertion point -> "' + where + '"';
}
var range = el.ownerDocument.createRange();
var frag;
switch(where){
case "beforebegin":
range.setStartBefore(el);
frag = range.createContextualFragment(html);
el.parentNode.insertBefore(frag, el);
return el.previousSibling;
case "afterbegin":
if(el.firstChild){
range.setStartBefore(el.firstChild);
frag = range.createContextualFragment(html);
el.insertBefore(frag, el.firstChild);
return el.firstChild;
}else{
el.innerHTML = html;
return el.firstChild;
}
case "beforeend":
if(el.lastChild){
range.setStartAfter(el.lastChild);
frag = range.createContextualFragment(html);
el.appendChild(frag);
return el.lastChild;
}else{
el.innerHTML = html;
return el.lastChild;
}
case "afterend":
range.setStartAfter(el);
frag = range.createContextualFragment(html);
el.parentNode.insertBefore(frag, el.nextSibling);
return el.nextSibling;
}
throw 'Illegal insertion point -> "' + where + '"';
}
13.FF下没有outerHTML问题:
if(typeof(HTMLElement)!="undefined" && !window.opera)
{
HTMLElement.prototype.__defineGetter__("outerHTML",function()
{
var a=this.attributes, str="<"+this.tagName, i=0;for(;i<a.length;i++)
if(a[i].specified)
str+=" "+a[i].name+'="'+a[i].value+'"';
if(!this.canHaveChildren)
return str+" />";
return str+">"+this.innerHTML+"</"+this.tagName+">";
});
HTMLElement.prototype.__defineSetter__("outerHTML",function(s)
{
var r = this.ownerDocument.createRange();
r.setStartBefore(this);
var df = r.createContextualFragment(s);
this.parentNode.replaceChild(df, this);
return s;
});
HTMLElement.prototype.__defineGetter__("canHaveChildren",function()
{
return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());
});
}
14.访问css的float和class:
由于float在JavaScript中是保留字,
IE:obj.style.styleFloat="left";
FF: obj.style.cssFloat="left";
同理获取对象的class时(IE&FF:obj.className;):
IE: obj.getAttribute("className");
FF: obj.getAttribute("class");
15.访问<label>的for属性
同样,for在JavaScript中是保留字:
IE:obj.getAttribute("htmlFor");
FF: obj.getAttribute("for");
16.访问元素继承的样式:
IE:obj.currentStyle.width;
FF: document.defaultView.getComputedStyle(obj,null).width;
17.获取网页可见区域大小:
FF(包含滚动条的宽度和高度):
window.innerWidth;
window.innerHeight;
IE&FF(不包含滚动条):
document.body.clientWidth;
document.body.clientHeight;
11.节点问题
IE中使用parentElement parement.children,而FF中使用parentNode parentNode.childNodes
childNodes的下标的含义在IE和FF中不同,FF使用DOM规范,childNodes中会插入空白文本节点。
FF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)
css:
1.
ul标签中FF中有个padding值,却没有margin值,而在IE中正好相反
解决办法:将ul的padding和margin都设为0(也可以不是0)如:padding:0;margin:0;list-style:none;
另外form默认在IE中也会有margin值,所以最好也将其margin和padding设为0
2.
ie中cursor:hand可以将鼠标设为手形,FF不行,
解决:都用cursor:pointer
3、居中问题
ie需要将父窗口:text-align:center;而ff则是margin-left:auto;margin-right:auto;
4.IE和FF盒模型有区别,所以有需要特殊设置
IE Box的总宽度是: width+padding+border+margin宽度总和
FF Box的总宽度就是 width的宽度,padding+border+margin的宽度在含在width内。
FF: 支持 !important(优先解析), IE 则忽略, 可用 !important 为 FF 特别设置样式
width:600px !important;//这个要放在前面才行
width:598px;
另外:传说IE7会奇怪的支持!important,试过却不行;
5.
IE6中在设置float的div中margin会加倍,解决办法:div里面加上display:inline;
6.透明滤镜:
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=30);
FF:opacity:0.3;
或者:
IE:filter:alpha(opacity=60);
FF:-moz-opacity:0.6;/*已过时,用上面的opacity代替*/
7.禁用选择
IE:使用js,onselectstart="return false;";
FF:使用CSS,-moz-user-select:none;
8:圆角:
FF中:-moz-border-radius:4px;
js:
1.
IE中innerText在FF中没有,使用textContent;
eg:
var obj=document.getElementById("_td");
var text;
if(obj.innerText) {
text=obj.innerText;
} else if(obj.textContent) {
text=obj.textContent;
}
(DHTML手册说innerText不能用在tr,td等节点上,不过我之前明明用过的,然后昨天在测试别人的页面时用上面的方法IE取不到值,有哪位知道的希望告知下,在什么情况下不能使用innerText)
2.
在Ajax中返回对象状态IE可以使用readystate但是在FF中必须为readyState,所以最好是都写成readyState
3.获取IE和FF中的键盘返回值,<input type="text" onkeyUp="test(event)"/>
function test(e) {
var keyc=GetKeyCode(e);
alert(keyc);
}
function GetKeyCode(e) {//取得不同浏览器下的键盘事件值
var keyc;
if(window.event) {//ie键盘事件
keyc=e.keyCode;
} else if (e.which) {//火狐
keyc=e.which;
}
return keyc;
}
4.为对象添加移除事件
var obj=document.getElementById("_tname');
添加事件:
if(obj.attachEvent) {
obj.attachEvent("onchange",function() {
otherfunction(params);//这里可以给其实方法传参,也可以直接调用其它方法
});
} else if(obj.addEventListener) {
obj.addEventListener("change",function() {
otherfunction(params);
},false);
}
移除事件:
obj.onclick=null;
/*下面的代码为什么不行,IE下输出obj.onclick竟然为anonymous,希望高手能帮忙解决
if(obj.detachEvent) {
obj.detachEvent("onchange",test);
} else if(obj.removeEventListener) {
obj.removeEventListener("change",test,false);
}*/
5.
IE中event.x和event.y
在FF中只有event.pageX,event.pageY
都有event.clientX和event.clientY属性
解决办法:
var x=e.x?e.x:e.pageX;//e为event对象传进来的参数
6.IE下 input.type属性为只读,但是MF下可以修改
7.在 IE 中,getElementsByName()、(document.all[name] (还未测试成功))均不能用来取得 div元素(是否还有其它不能取的元素还不知道)。
8.通过js来触发事件
<script type="text/javascript">
function handerToClick(){
var obj=document.getElementById("btn1");
if(document.all){//IE中
obj.fireEvent("onclick");
} else {
var e=document.createEvent('MouseEvent');
e.initEvent('click',false,false);
obj.dispatchEvent(e);
}
}
</script>
<input type="button" value="btn1" id="btn1" onclick=" alert('按钮btn1的click事件') " />
<input type="button" value="触发ID为btn1的onclick事件" onclick=" handerToClick() " />
9.IE下event对象有srcElement属性,Firefox下,event对象有target属性
e = e||window.event;
if(e==null)//当事件在iframe中时为空
e=window.top.document.parentWindow.event;
var obj=e.srcElement || e.target;
10.在FF中自己定义的属性必须getAttribute()取得
11.在FF中,Ajax不能同步调用,只能使用异步方法
xhttp.open("GET",url,bAsync || navigator.appName=="Netscape");//当在FF下时就只能异步 回传了
12.FF下没有insertAdjacentHTML问题
两种解决办法,在如果在iframe中只能使用后一种:
①
IAHTML:function(){//insertAdjacentHTML by BlueDestiny ^_^
if(document.body.insertAdjacentHTML){return;}
HTMLElement.prototype.insertAdjacentHTML = function(sWhere, sHTML){
var df = null,r = this.ownerDocument.createRange();
switch (String(sWhere).toLowerCase()) {
case "beforebegin":
r.setStartBefore(this);
df = r.createContextualFragment(sHTML);
this.parentNode.insertBefore(df, this);
break;
case "afterbegin":
r.selectNodeContents(this);
r.collapse(true);
df = r.createContextualFragment(sHTML);
this.insertBefore(df, this.firstChild);
break;
case "beforeend":
r.selectNodeContents(this);
r.collapse(false);
df = r.createContextualFragment(sHTML);
this.appendChild(df);
break;
case "afterend":
r.setStartAfter(this);
df = r.createContextualFragment(sHTML);
this.parentNode.insertBefore(df, this.nextSibling);
break;
}
};
}(),
②
insertHtml:function(where, el, html){
where = where.toLowerCase();
if(el.insertAdjacentHTML){
switch(where){
case "beforebegin":
el.insertAdjacentHTML('BeforeBegin', html);
return el.previousSibling;
case "afterbegin":
el.insertAdjacentHTML('AfterBegin', html);
return el.firstChild;
case "beforeend":
el.insertAdjacentHTML('BeforeEnd', html);
return el.lastChild;
case "afterend":
el.insertAdjacentHTML('AfterEnd', html);
return el.nextSibling;
}
throw 'Illegal insertion point -> "' + where + '"';
}
var range = el.ownerDocument.createRange();
var frag;
switch(where){
case "beforebegin":
range.setStartBefore(el);
frag = range.createContextualFragment(html);
el.parentNode.insertBefore(frag, el);
return el.previousSibling;
case "afterbegin":
if(el.firstChild){
range.setStartBefore(el.firstChild);
frag = range.createContextualFragment(html);
el.insertBefore(frag, el.firstChild);
return el.firstChild;
}else{
el.innerHTML = html;
return el.firstChild;
}
case "beforeend":
if(el.lastChild){
range.setStartAfter(el.lastChild);
frag = range.createContextualFragment(html);
el.appendChild(frag);
return el.lastChild;
}else{
el.innerHTML = html;
return el.lastChild;
}
case "afterend":
range.setStartAfter(el);
frag = range.createContextualFragment(html);
el.parentNode.insertBefore(frag, el.nextSibling);
return el.nextSibling;
}
throw 'Illegal insertion point -> "' + where + '"';
}
13.FF下没有outerHTML问题:
if(typeof(HTMLElement)!="undefined" && !window.opera)
{
HTMLElement.prototype.__defineGetter__("outerHTML",function()
{
var a=this.attributes, str="<"+this.tagName, i=0;for(;i<a.length;i++)
if(a[i].specified)
str+=" "+a[i].name+'="'+a[i].value+'"';
if(!this.canHaveChildren)
return str+" />";
return str+">"+this.innerHTML+"</"+this.tagName+">";
});
HTMLElement.prototype.__defineSetter__("outerHTML",function(s)
{
var r = this.ownerDocument.createRange();
r.setStartBefore(this);
var df = r.createContextualFragment(s);
this.parentNode.replaceChild(df, this);
return s;
});
HTMLElement.prototype.__defineGetter__("canHaveChildren",function()
{
return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());
});
}
14.访问css的float和class:
由于float在JavaScript中是保留字,
IE:obj.style.styleFloat="left";
FF: obj.style.cssFloat="left";
同理获取对象的class时(IE&FF:obj.className;):
IE: obj.getAttribute("className");
FF: obj.getAttribute("class");
15.访问<label>的for属性
同样,for在JavaScript中是保留字:
IE:obj.getAttribute("htmlFor");
FF: obj.getAttribute("for");
16.访问元素继承的样式:
IE:obj.currentStyle.width;
FF: document.defaultView.getComputedStyle(obj,null).width;
17.获取网页可见区域大小:
FF(包含滚动条的宽度和高度):
window.innerWidth;
window.innerHeight;
IE&FF(不包含滚动条):
document.body.clientWidth;
document.body.clientHeight;
11.节点问题
IE中使用parentElement parement.children,而FF中使用parentNode parentNode.childNodes
childNodes的下标的含义在IE和FF中不同,FF使用DOM规范,childNodes中会插入空白文本节点。
FF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)
相关推荐
实现JavaScript瀑布流兼容IE、Firefox和Chrome的方法包括: 1. 使用条件注释或者现代izr库来检测浏览器版本和特性。 2. 对于不支持CSS3 Flexbox或Grid的浏览器,可以使用JavaScript来计算和设置元素的样式,如宽度...
针对标题提及的"如何让div+css兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器",这里将详细讨论一些关键的CSS兼容性问题及解决方案。 1. **DOCTYPE的影响**: DOCTYPE声明会影响浏览器进入何种文档模式。在HTML4或...
### 浏览器兼容性问题解析:针对IE6、IE7与Firefox的样式处理 在Web开发中,浏览器兼容性始终是一项重要的考虑因素。不同浏览器对CSS的支持程度不一,尤其是对于早期版本的Internet Explorer(IE)如IE6、IE7,以及...
### DIV+CSS 兼容性 IE FF:深入探讨浏览器间的差异与共通点 #### 一、引言 随着Web技术的发展,DIV+CSS布局已成为网页设计中的主流方式。然而,在实际开发过程中,不同的浏览器(如Internet Explorer 6/7/8、Fire...
针对`IE6`、`IE7`、`IE8`、`IE9`以及`Firefox`、`Chrome`等浏览器的兼容性问题,我们可以采取以下策略: 1. **DOCTYPE声明**:DOCTYPE声明会影响浏览器进入不同的渲染模式。为了确保统一的行为,通常使用XHTML 1.0...
FF(Firefox)和IE(Internet Explorer)作为两大主流浏览器,它们对CSS的解析方式存在一定的差异,这使得开发者需要进行额外的工作来确保页面在不同浏览器下展示一致。本文将深入探讨FF和IE之间的CSS兼容性问题,...
标题中的"google鼠标经过JS特效,IE/FF兼容"指的是一个JavaScript实现的特效,它在鼠标悬停(mouseover)某个元素时,会触发一个特定的动画效果,即上部的图片从小到大闪动出现。这个特效适用于谷歌浏览器(Google ...
本文档“DIV+css兼容性FFIE6IE7IE8IE9[借鉴].pdf”主要关注如何处理Firefox和不同版本的Internet Explorer(IE6、IE7、IE8、IE9)之间的CSS差异。以下是一些关键知识点的详细说明: 1. **CSS Hack**: - CSS Hack...
本文将详细讨论FF(Firefox)与IE(Internet Explorer)在处理这两种技术时存在的差异,并提供相应的解决策略。 1. **form元素访问方式**:在IE下,可以使用`document.formName.item("itemName")`或`document.form...
浏览器兼容性问题一直是Web开发中的一个痛点,尤其是在处理IE6和Firefox这两个有着显著差异的浏览器时。以下是对这些兼容性问题的深入分析和解决方案。 首先,我们关注的是IE6中的`a`标签链接问题。在IE6中,如果`a...
因此,编写能够同时在Firefox和IE上正常运行的JavaScript代码需要对这两种浏览器的特性有深入理解。 描述中提到的"在IE,FIREFOX下都能用的JAVASCRIPT日历控件"表明这个控件已经考虑到了两种浏览器的差异,通过精心...
1. **跨浏览器兼容性**:每个浏览器都有自己的JavaScript引擎和HTML渲染方式,因此,确保代码在所有主流浏览器(如Chrome、Firefox、Safari、Edge和IE)下工作是一项挑战。对于日期控件,可能需要使用条件注释或库如...
在本资源中,作者针对兼容性问题进行了优化,使得推拉门菜单可以在Internet Explorer(IE)和Firefox(FF)这两个主流浏览器上正常工作。 在Web开发中,由于不同浏览器对CSS、JavaScript等技术的解析和实现存在差异...
在本示例中,"js新闻上下滚动效果(兼容IE和ff)"指的是利用JavaScript实现一个新闻标题在网页上进行上下滚动的效果,这种效果常见于新闻网站,能够展示多条新闻,同时保持页面空间的有效利用。这个效果不仅在现代...
标题“兼容ie6/ie7/ie8/ff 省市县的js”指的是一个JavaScript插件或库,其主要目的是解决浏览器兼容性问题,特别是针对较老版本的Internet Explorer(IE6、IE7、IE8)以及Firefox(FF)。这个选择器功能允许用户在...
例如,IE的ActiveXObject、document.all等特性与Firefox不兼容,需要使用条件注释或现代JavaScript库(如jQuery)来处理兼容性问题。 5. **JavaScript/jQuery实现**:通常使用JavaScript或者jQuery来实现这种联动...
JavaScript(简称JS)是一种广泛应用于Web开发的脚本语言,它在不同的浏览器中可能存在兼容性问题,特别是Internet Explorer(IE)和Firefox(FF)之间。这两个浏览器对JS的实现方式有所不同,导致某些特性或功能在...
本教程将详细介绍如何创建一个无缝兼容Firefox(火狐浏览器)和Internet Explorer(IE浏览器)的js跑马灯效果。 1. **JavaScript基础知识**: 在开始之前,我们需要对JavaScript的基础知识有一定了解。JavaScript...
在本案例中,"兼容ie和ff的页签"指的是一个JavaScript实现的页签功能,能够同时在Internet Explorer(IE)和Firefox(FF)这两个主流浏览器上正常工作。由于这两种浏览器对某些Web标准的实现存在差异,因此创建跨...