關於瀏覽器兼容問題的解決辦法,全部都在這里了


目前,最為流行的瀏覽器共有五個:分別是ie,Edge瀏覽器(屬於微軟),火狐,谷歌(chrome)Safari和Opera五大瀏覽器。

這五大瀏覽器分別有各自的瀏覽器內核,下面介紹以下各個瀏覽器的內核(包括一些國內的瀏覽器):

Trident內核:IE ,360,,獵豹,百度;

Gecko內核:火狐----------->這個瀏覽器內核是開源的瀏覽器內核,插件非常多,-------------->缺點:打開速度慢(加載flash插件)<-----額外介紹----->。

Webkit:遨游,蘋果 ,symbian;

Bink:chrome瀏覽器,大部分國產瀏覽器最新版本都采用Blink;

由於這些瀏覽器的內核不相同,因此,他們的對編輯頁面的一些屬性的支持也有所不同,接下來,我就談一談在解決瀏覽器兼容方面的見解:

首先是關於innerText和textContent的問題的見解:

innerText 谷歌,火狐和IE8都支持
低版本 的火狐不支持innerText
textContent在IE8中的結果是undefined;
textContent在谷歌和火狐中支持;

這些內容是必須知道的,也是以后解決兼容性問題的引子或者思路,同時也是基礎。

在解決瀏覽器兼容性的問題上面,首先,可以通過獲取瀏覽器的版本來判斷這個瀏覽器是不是支持這個屬性,但是這種辦法非常的麻煩。
具體做法是:我要在一系列的信息中找到這個瀏覽器版本里面的具體是什么樣的,然后用正則表達式去匹配,然后確定這個瀏覽器里面具體用的什么東西。這就是整個的內容,所以,相當的麻煩。
當然,獲取瀏覽器版本的代碼很簡單,就一句話,一行代碼,但是僅僅是為了判斷這個瀏覽器是不是支持這個屬性 ,是不是放在這里好像有點兒大材小用了。因此,就直接判斷這個瀏覽器里面是不是支持這個屬性就可以了。

為了解決這個不兼容的問題,我們可以編輯以下代碼來解決上述問題:

 1 //任意元素都可以設置成文本內容----------因此把“任意”元素當成對象(element)傳遞到函數中
 2 
 3     //element---->任意元素 
 4     //text--->任意文本內容 
 5     function setInnerText(element,text) { 
 6     if(typeof (element.textContent)=='undefined'){//是IE8瀏覽器 
 7     element.innerText=text; 
 8        }else{ 
 9     //瀏覽器支持textContent這個屬性 
10      element.textContent=text; 
11         } 
12     } 
13 
14 
15       //獲取任意元素中的文本內容 
16     function getInnerText(element) { 
17     if(typeof (element.textContent)=="undefined"){ 
18     //如果瀏覽器不支持textContext這個屬性則返回innerText的值 
19     return element.innerText; 
20         }else{ 
21     //如果瀏覽器支持textContext屬性,則直接返回該屬性的值 
22     return element.textContent; 
23         } 
24     } 

上述代碼就可以解決innnerText和textContent在各個瀏覽器之間不兼容的問題(上述代碼目前只在谷歌,火狐,IE8版本上面測試,以后還會在其他的瀏覽器的不同版本上面測試,測試結果還會不斷的更新,盡請期待)。

上面介紹的內容只闡述部分屬性在各個瀏覽器上面的差異,當然,還有其他的兼容問題存在,他們分別是:

(1)獲取某個元素中的第一個子元素 

(2)獲取某個元素中的最后一個子元素 

(3)獲取某個元素的前一個兄弟元素 

(4)獲取某個元素的后一個兄弟元素 

下面,我分別給出了相應的兼容性問題解決辦法代碼:

 1  1 //獲取某個元素中的第一個子元素 
 2  2     function getFirstElement(element) { 
 3  3     if(element.firstElementChild){ 
 4  4     //如果瀏覽器支持這個屬性就直接返回第一個子元素 
 5  5     return element.firstElementChild; 
 6  6     }else{ 
 7  7     //如果瀏覽器不支持這個firstElementChild屬性,先獲取傳入進來的父級元素中的第一個子節點 
 8  8     var node=element.firstChild;//先獲取這個節點 
 9  9     while (node&&node.nodeType!=1){//判斷節點存在並且不是標簽 
10 10     node=node.nextSibling;//繼續找當前節點的下一個節點 
11 11     } 
12 12     return node; 
13 13     } 
14 14     } 
15 20     //下面這連個屬性在各個不同的瀏覽器中顯示的方式有所不同
16 21     //my$("uu").firstChild 
17 22     //my$("uu").firstElementChild 
18 23     
19 24     //獲取某個元素中的最后一個子元素 
20 25     function getLastElement(element) { 
21 26     if(element.lastElementChild){ 
22 27     return element.lastElementChild; 
23 28     }else{ 
24 29     //獲取當前元素的最后一個子節點 
25 30     var node=element.lastChild; 
26 31     while (node&&node.nodeType!=1){ 
27 32     node=node.previousSibling; 
28 33     } 
29 34     return node; 
30 35     } 
31 36     } 
32 
33 44     
34 45     //獲取某個元素的前一個兄弟元素 
35 46     function getPreviousElement(element) { 
36 47     if(element.previousElementSibling){ 
37 48     return element.previousElementSibling 
38 49     }else{ 
39 50     var node=element.previousSibling; 
40 51     while (node&&node.nodeType!=1){ 
41 52     node=node.previousSibling; 
42 53     } 
43 54     return node; 
44 55     } 
45 56     } 
46 57     
47 58     
48 59     
49 60     //獲取某個元素的后一個兄弟元素 
50 61     function getNextElement(element) { 
51 62     if(element.nextElementSibling){ 
52 63     return element.nextElementSibling 
53 64     }else{ 
54 65     var node=element.nextSibling; 
55 66     while (node&&node.nodeType!=1){ 
56 67     node=node.nextSibling; 
57 68     } 
58 69     return node; 
59 70     } 
60 71     } 

這些代碼目前只是更新到這兒,以后還會陸續更新跟多關於瀏覽器兼容問題更多思路和見解。

 精彩內容,掃描二維碼獲取更多內容:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM