1. 程式人生 > >JS瀏覽器相容性

JS瀏覽器相容性

1、事件繫結

相容寫法

function add(obj,event){
    if (obj.addEventListener) {
        obj.addEventListener(event,fn,fase);
    }else{
        obj.attachEvent("on"+event,fn);
    }
}

小結:addEventListener()相容firefox、chrome、Safari、opera、IE9+

         attachEvent()相容IE7、8

2、event事件物件

相容寫法

document.onclick = function(e){
     var e = e||window.event;  
     console.log(e.clientX);
}

小結:e相容火狐瀏覽器,window.event相容非火狐瀏覽器。

3、獲取scrollTop

相容寫法:

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

小結:document.documentElement.scrollTop相容非chrome

        document.body.scrollTop相容chrome

4、阻止瀏覽器預設事件

相容寫法:

function prevent(event){
    if (event.preventDefault) {
        event.preventDefault();
    }else{
        event.returnValue = false;
    }
}

小結:eventPreventDefault()不相容IE6-8

             event.returnValue=false相容IE

5、阻止冒泡

相容寫法:

function stop(event){
    if (event.stopPropagation) {
        event.stopPropagation();
    }else{
        event.cancleBubble = true;
    }
}

小結:event.stopPropagation()不相容IE6-8

            event.cancelBubble=true相容IE

6、滾輪

相容寫法:

function mouseWheel(obj,fn){
    var ff = window.navigator.userAgent.indexOf('Firefox');
    if (ff!=-1) {  
      obj.addEventListener('DOMMouseScroll',wheel,false);//相容火狐
    }else{
        obj.onmousewheel = wheel;//非火狐
    }
}

小結:obj.addEventListener('DOMMouseScroll',wheel,false)相容火狐

          obj.onmousewheel=wheel非火狐

7、獲取classname

相容寫法

function byClass(parent,className){
    //通過className查詢元素的相容問題
    //如果現代瀏覽器有這個寫法
    if (parent.getElementsByClassName) {
        return parent.getElementsByClassName(className);//返回直接查詢到的元素集
    }else{
        //IE瀏覽器
        var arr = [];//用於儲存最終查詢到的元素
        var els = parent.getElementsByTagName('*');//獲取查詢範圍下的所有元素
        var reg = new RegExp('\\b'+className+'\\b','g');
        for (var i=0;i<els.length;i++) {
            if (reg.test(els[i].className)) {//判斷els.className與reg是否匹配,若匹配返回true
                arr.push(els[i]);
            reg.lastIndex = 0;                 
            }
        }
        return arr;//返回查詢到的元素
    }
}

補充,對於為何要加上reg.lastIndex = 0;(13行下面那一句程式碼),原因如下:

若不加這句程式碼,有連續的兩個類名匹配時,只會匹配第一個,則第二個不會。究起原因就是RegExp物件的lastIndex屬性:屬性存放一個整數,它宣告的是上一次匹配文字之後的第一個字元的位置。若使用了‘g’全域性修飾符,在執行了test方法後,lastIndex就會將匹配到的字串的位置記錄下來作為下一次匹配的起始位置。若是下一次匹配沒有成功,則lastIndex置為0。

若不加'g'全域性修飾符,則可以把這句程式碼省略掉。請點選檢視demo

小結:IE瀏覽器不支援getElementsByClassName()所以只能自己寫一個方法來獲取class

後續還會補充,有錯誤指出還請指出。

相關推薦

CSS瀏覽器相容性寫法、JS瀏覽器相容性寫法

一、瀏覽器的核心 IE:trident核心 Firefox(火狐):gecko核心 Chrome:Blink(基於Webkit) Safari:Webkit核心 Oprea:現用Blink,以前是presto核心 二、CSS瀏覽器相容性 -moz-   火狐

JS瀏覽器相容性

1、事件繫結 相容寫法 function add(obj,event){ if (obj.addEventListener) { obj.addEventListener(event,fn,fase); }else{ obj

js瀏覽器相容性

1、ie瀏覽器不支援函式預設值   hi('李四');   function hi(msg = '張三'){ alert(msg);   }  此函式在火狐、谷歌等瀏覽器下均沒問題,唯獨在萬惡的ie瀏覽器下會提示如下錯誤: 為什麼會出現這樣的問題呢? 在ES6之前,

JS元件系列——Bootstrap Table 凍結列功能IE瀏覽器相容性問題解決方案

前言:最近專案裡面需要用到表格的凍結列功能,所謂“凍結列”,就是某些情況下表格的列比較多,需要固定前面的幾列,後面的列滾動。遺憾的是,bootstrap table裡自帶的fixed column功能有一點bug,於是和同事討論該如何解決,於是就有了這篇文章。 一、起因回顧 第一列固定 貌似

js瀏覽器 event || window.event相容性寫法

Js瀏覽器對event 和window.event寫法不同 在IE/Opera中,用window.event寫法, 在Firefox裡面,  用event寫法。    event=event || window.event;    event.preventDefault

js瀏覽器操作DOM之刪除DOM

utf-8 sel python move mage child rip 操作dom bsp 刪除一個DOM節點就比插入要容易得多。 要刪除一個節點,首先要獲得該節點本身以及它的父節點,然後調用父節點的removechild把自己刪掉即可: <!Doctype ht

JS——瀏覽器對象模型Window

參考 工具 dem dom pre innerhtml || http str Window 對象:所有瀏覽器都支持 window 對象。它表示瀏覽器窗口。所有 JavaScript 全局對象、函數以及變量均自動成為 window 對象的成員。 全局變量是 window 對

js 瀏覽器判斷

js 瀏覽器判斷其他鏈接:https://segmentfault.com/a/1190000004493157 function browerCheck(){ var userAgent = window.navigator.userAgent; var isIE = userAgent.i

js瀏覽器判斷

lse navi cas agen 搜狗瀏覽器 activex case || agent if(navigator.userAgent.toLowerCase().indexOf(‘se 2.x‘)>-1 ? true : false) {

JS瀏覽器事件循環機制

由於 分享圖片 span 條件 計時不準確 clas 次循環 all 問題 文章來自我的 github 博客,包括技術輸出和學習筆記,歡迎star。 先來明白些概念性內容。 進程、線程 進程是系統分配的獨立資源,是 CPU 資源分配的基本單位,進程是由一個或者多個線程組

JS瀏覽器的三種彈框:

意見 基礎上 pro 基礎 模態 string 空字符 lin als 1.alert:使用alert彈框提示信息,最後都會被轉化為字符串輸出(因為調用了toString這個方法)。比如alert(1+1)彈出的結果應該是字符串形式的“2”。 2.Confirm:在aler

JS——瀏覽器關閉事件

win listener lis pushstate document fun ops turn class onbeforeunload 關閉或刷新瀏覽器會觸發此事件 window.onbeforeunload = function(ev) {

js 瀏覽器 寬高 各種

setw body ram .org 大小 屏幕分辨率 line firefox color 常用: JS 獲取瀏覽器窗口大小 // 獲取窗口寬度 if (window.innerWidth) wi

javascript面向物件程式設計--惰性載入函式(瀏覽器相容性處理)

因為各大瀏覽器所使用的JS引擎不同,所以在實現某一個功能時都或多或少的存在差異,導致在寫程式碼時要針對每一個功能給出相容瀏覽器的不同實現方式,這樣在執行程式碼時就會造成效能的損耗。所以就出現了惰性載入函式的概念。原理就是:當前瀏覽器第一次支援以該方法實現某功能,那麼在這個頁面執行期間會一直都支援該方

AngularJS進階(三十五)瀏覽器相容性解決之道

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

遇到的瀏覽器相容性問題

寫小米網頁的過程都是使用火狐瀏覽器調整頁面佈局,當用360瀏覽器和本機IE瀏覽器開啟時,佈局就錯亂了。 問題1:在火狐瀏覽器上四張圖片一排浮動在右側,IE瀏覽器開啟頁面,產品圖片一起跑到當前div塊下方。引起錯亂。 解決方法:在<head>

CSS瀏覽器相容性

1.對齊文字和文字輸入框 問題: 當input元素在設定了高時,在IE7、IE8、IE9下會出現文字和文字輸入框不能對齊的現象,其他正常,包括opera 解決: vertical-align:middle; 2.容器寬度在瀏覽器中解釋不同 問題: 不同瀏覽器下寬度不同,比如說設定width:20

瀏覽器相容性問題解決方案彙總

普及:瀏覽器的相容性問題,往往是個別瀏覽器(沒錯,就是那個與眾不同的瀏覽器)對於一些標準的定義不一致導致的。俗話說:沒有IE就沒有傷害。 貼士:內容都是自己總結的,不免會出現錯誤或者bug,歡迎更正和補充,本帖也會不斷更新。 Normalize.css 不同瀏覽器的預設樣式存在差異,可以

那些年我們經常遇到的瀏覽器相容性問題

 那些年我們追過的男孩或者女孩,你還記得嗎?他或者她也許再也不會出現在你的生命中了,但是,我們每天還是會遇到熟悉的再也不能熟悉的那些瀏覽器相容性Bug。     在總結瀏覽器問題之前,我覺得我們應該掌握目錄中的1~7標題的內容,對後面的問題,我想應該會更明

常遇到的瀏覽器相容性問題

1. ie6雙倍邊距 在使用了float的情況下,不管是向左還是向右都會出現雙倍,最簡單的解決方法就是用display:inline;加到css裡面去。 2. 文字本身的大小不相容。 同樣是font-size:14px的宋體文字,在不同瀏覽器下佔的空間是不一樣的,ie下實際佔高