js在firefox和ie中的区别(一)

一、getElementsByName在ie中获取不到子集。
function custom_getElementByName(){
    //firefox中直接获取
    var nav_ul=document.getElementsByName('nav_li');        
    var arr_len=nav_ul.length;
    //ie中先取所有类似元素,再去判断该元素的name值是否是我们需要的,如果是存储到数组中
    if(arr_len==0){
        nav_ul = new Array();
        var nav_ul_ie=document.getElementsByTagName('li');            
        for (var iIE = 0; iIE < nav_ul_ie.length; iIE++){        
             if (nav_ul_ie[iIE].getAttribute("name") == "nav_li"){
                nav_ul[nav_ul.length] = nav_ul_ie[iIE];
            }
        }
        arr_len=nav_ul.length;
    }
    return nav_ul;
}

二、通过js来判断浏览器的版本(通过解析userAgent中的特征来判断浏览器类型)
function getBrowserType(){
    var Sys = {};
    var ua = navigator.userAgent.toLowerCase();
    var s;
   (s = ua.match(/msie ([\d.]+)/)) ? Sys.ie = s[1] :
   (s = ua.match(/firefox\/([\d.]+)/)) ? Sys.firefox = s[1] :
   (s = ua.match(/chrome\/([\d.]+)/)) ? Sys.chrome = s[1] :
   (s = ua.match(/opera.([\d.]+)/)) ? Sys.opera = s[1] :
   (s = ua.match(/version\/([\d.]+).*safari/)) ? Sys.safari = s[1] : 0;
   //以下进行测试
   if (Sys.ie) document.write('IE: ' + Sys.ie);
   if (Sys.firefox) document.write('Firefox: ' + Sys.firefox);
   if (Sys.chrome) document.write('Chrome: ' + Sys.chrome);
   if (Sys.opera) document.write('Opera: ' + Sys.opera);
   if (Sys.safari) document.write('Safari: ' + Sys.safari);
}

三、获取位置,在firefox中,无法使用object.style.pixelLeft,只能用object.style.left (top一样) 。
pixelLeft返回定位元素左边界偏移量的整数像素值.pixelLeft意思就是这个对象离左边的距离。
left的值是String,left(x)是带单位的值;pixelLeft的值是Integer,是不带单位
function getObjectLeft(){
     var p = new function(){this.left;this.top;};
     p.left = parseInt(obj.style.left.slice(0,-2),10);
     p.top = parseInt(obj.style.top.slice(0,-2),10);
    
     //pixelLeft在firefox不支持
     p.left=currentMoveObj.style.pixelLeft;
     p.top=currentMoveObj.style.pixelTop;
     return p;
}

四、透明度设置在firefox和ie中不同
function setOpcity(obj,value){    
     // alpha(opacity=50)仅被IE支持       
     if(isMSIE){    
       obj.style.filter="alpha(opacity="+value+")";    
     }else{    
       obj.style.MozOpacity=value*0.01;    
     }    
}

五、禁止文本选择的方法
ie中onselectstart="return false"
firefox中可以通过css样式去控制-moz-user-select:none;

六、其他差异
1.form对象ie可以通过forms('fname')获取到form对象,但是firefox不可以
解决方案:用下标来识别过forms('id')
2.在ie中div对象可以使用id作为对象的变量名直接使用,但是firefox中不可以
解决方案:获得对象的方法不管是不是DIV对象,都使用getElementById方法。
3.IE中可以通过showModalDialog和showModelessDialog打开模态和非模态窗口,但是MF不支持。
解决办法:直接使用open(pageURL,name,parameters)方式打开新窗口。
4.event.x 与 event.y 问题,在IE 中,event 对象有 x, y 属性,MF中没有。
解决方法:在MF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。故采用 event.clientX 代替 event.x。在IE 中也有这个变量。event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。如果要完全一样,可以稍麻烦些:mX = event.x ? event.x : event.pageX;然后用 mX 代替 event.x
5.body 对象MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章