中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

淺析JavaScript中瀏覽器的兼容問題
來源:易賢網(wǎng) 閱讀:1087 次 日期:2016-07-08 09:47:35
溫馨提示:易賢網(wǎng)小編為您整理了“淺析JavaScript中瀏覽器的兼容問題”,方便廣大網(wǎng)友查閱!

下面小編就為大家?guī)硪黄獪\析JavaScript中瀏覽器的兼容問題。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考

瀏覽器兼容性問題是在實(shí)際開發(fā)中容易忽略而又最重要的一部分。我們?cè)谥v老版本瀏覽器兼容問題之前,首先要了解什么是能力檢測(cè),它是來檢測(cè)瀏覽器有沒有這種能力,即判斷當(dāng)前瀏覽器是否支持要調(diào)用的屬性或者方法。下面做了一些簡(jiǎn)短的介紹。

1、innerText 和 innerContent

1)innerText 和 innerContent 的作用相同

2)innerText IE8之前的瀏覽器支持

3)innerContent 老版本的Firefox支持

4)新版本的瀏覽器兩種方式都支持

1 // 老版本瀏覽器兼容 innerText 和 innerContent

2 if (element.textContent) {

3    return element.textContent ;

4  } else {

5    return element.innerText;

6  }

2、獲取兄弟節(jié)點(diǎn)/元素的兼容性問題

 1)兄弟節(jié)點(diǎn),所有瀏覽器都支持

①nextSibling 下一個(gè)兄弟節(jié)點(diǎn),可能是非元素節(jié)點(diǎn);會(huì)獲取到文本節(jié)點(diǎn)

②previousSibling  上一個(gè)兄弟節(jié)點(diǎn),可能是非元素節(jié)點(diǎn);會(huì)獲取到文本節(jié)點(diǎn)

 2)兄弟元素,IE8以前不支持

①previousElementSibling 獲取上一個(gè)緊鄰的兄弟元素,會(huì)忽略空白  

②nextElementSibling  獲取下一個(gè)緊鄰的兄弟元素,會(huì)忽略空白

//兼容瀏覽器

// 獲取下一個(gè)緊鄰的兄弟元素

function getNextElement(element) {

  // 能力檢測(cè)

 if(element.nextElementSibling) {

   return element.nextElementSibling;

  } else {

     var node = element.nextSibling;

     while(node && node.nodeType !== 1) {

         node = node.nextibling;

     }

     return node;

  }

 }

----------------------------------------------------------------------

/**

* 返回上一個(gè)元素

* @param element

* @returns {*}

*/

function getPreviousElement(element) {

  if(element.previousElementSibling) {

    return element.previousElementSibling;

  }else {

    var el = element.previousSibling;

    while(el && el.nodeType !== 1) {

      el = el.previousSibling;

      }

    return el;

  }

}

--------------------------------------------------------------------

/**

* 返回第一個(gè)元素firstElementChild的瀏覽器兼容

* @param parent

* @returns {*}

*/

function getFirstElement(parent) {

  if(parent.firstElementChild) {

    return parent.firstElementChild;

  }else {

    var el = parent.firstChild;

    while(el && el.nodeType !== 1) {

      el = el.nextSibling;

      }

    return el;

  }

}

---------------------------------------------------------------------

/**

* 返回最后一個(gè)元素

* @param parent

* @returns {*}

*/

function getLastElement(parent) {

  if(parent.lastElementChild) {

    return parent.lastElementChild;

  }else {

    var el = parent.lastChild;

    while(el && el.nodeType !== 1) {

      el = el.previousSibling;

      }

    return el;

  }

}

-------------------------------------------------------------------

/**

*獲取當(dāng)前元素的所有兄弟元素

* @param element

* @returns {Array}

*/

function sibling(element) {

  if(!element) return ;

   

  var elements = [ ];

  var el = element.previousSibling;

  while(el) {

    if(el.nodeType === 1) {

      elements.push(el);

    }

    el = el.previousSibling;

  }

   el = element.previousSibling;

   while(el ) {

    if(el.nodeType === 1) {

      elements.push(el);

    }

    el = el.nextSibling;

  }

    return elements;

}

3、array.filter();   

 // 使用指定的函數(shù)測(cè)試所有元素,并創(chuàng)建一個(gè)包含所有通過測(cè)試的元素的新數(shù)組

// 兼容舊環(huán)境

if (!Array.prototype.filter)

{

 Array.prototype.filter = function(fun /*, thisArg */)

 {

  "use strict";

  if (this === void 0 || this === null)

   throw new TypeError();

  var t = Object(this);

  var len = t.length >>> 0;

  if (typeof fun !== "function")

   throw new TypeError();

  var res = [];

  var thisArg = arguments.length >= 2 ? arguments[1] : void 0;

  for (var i = 0; i < len; i++)

  {

   if (i in t)

   {

    var val = t[i];

    // NOTE: Technically this should Object.defineProperty at

    //    the next index, as push can be affected by

    //    properties on Object.prototype and Array.prototype.

    //    But that method's new, and collisions should be

    //    rare, so use the more-compatible alternative.

    if (fun.call(thisArg, val, i, t))

     res.push(val);

   }

  }

  return res;

 };

}

4、array.forEach();

// 遍歷數(shù)組

//兼容舊環(huán)境

// Production steps of ECMA-262, Edition 5, 15.4.4.18

// Reference: http://es5.github.io/#x15.4.4.18

if (!Array.prototype.forEach) {

 Array.prototype.forEach = function(callback, thisArg) {

  var T, k;

  if (this == null) {

   throw new TypeError(' this is null or not defined');

  }

  // 1. Let O be the result of calling toObject() passing the

  // |this| value as the argument.

  var O = Object(this);

  // 2. Let lenValue be the result of calling the Get() internal

  // method of O with the argument "length".

  // 3. Let len be toUint32(lenValue).

  var len = O.length >>> 0;

  // 4. If isCallable(callback) is false, throw a TypeError

  exception. // See: http://es5.github.com/#x9.11

  if (typeof callback !== "function") {

   throw new TypeError(callback + ' is not a function');

  }

  // 5. If thisArg was supplied, let T be thisArg; else let

  // T be undefined.

  if (arguments.length > 1) {

   T = thisArg;

  }

  // 6. Let k be 0

  k = 0;

  // 7. Repeat, while k < len

  while (k < len) {

   var kValue;

   // a. Let Pk be ToString(k).

   //  This is implicit for LHS operands of the in operator

   // b. Let kPresent be the result of calling the HasProperty

   //  internal method of O with argument Pk.

   //  This step can be combined with c

   // c. If kPresent is true, then

   if (k in O) {

    // i. Let kValue be the result of calling the Get internal

    // method of O with argument Pk.

    kValue = O[k];

    // ii. Call the Call internal method of callback with T as

    // the this value and argument list containing kValue, k, and O.

    callback.call(T, kValue, k, O);

   }

   // d. Increase k by 1.

   k++;

  }

  // 8. return undefined

 };

}

5、注冊(cè)事件

.addEventListener = function (type,listener,useCapture ) { }; 

//第一個(gè)參數(shù) 事件名稱 

//第二個(gè)參數(shù) 事件處理函數(shù)(監(jiān)聽者) 

//第三個(gè)參數(shù) true捕獲 false冒泡 

//IE9以后才支持 

// 兼容舊環(huán)境

var EventTools = {

    addEventListener: function (element, eventName, listener) {

      //能力檢測(cè)

      if(element.addEventListener) {

        element.addEventListener(eventName, listener,false);

      }else if(element.attachEvent) {

        element.attachEvent("on" + eventName, listener);

      }else{

        element["on" + eventName] = listener;

      }

    },

//  想要移除事件,不能使用匿名函數(shù)

    removeEventListener: function (element, eventName, listener) {

      if(element.removeEventListener) {

        element.removeEventListener(eventName,listener,false);

      }else if(element.detachEvent) { //IE8以前注冊(cè).attachEvent和移除事件.detachEvent

        element.detachEvent("on"+eventName,listener);

      }else{

        element["on" + eventName] = null;

      }

    }

  };

6、事件對(duì)象

 1)事件參數(shù)e,就是事件對(duì)象,標(biāo)準(zhǔn)的獲取方式

btn.onclick = function(e) { }

 2)e.eventPhase 事件階段,IE8以前不支持

 3)e.target 始終是觸發(fā)事件的對(duì)象(點(diǎn)擊的按鈕)

   i)IE8以前 srcElement

   ii)瀏覽器兼容

var target = e.target || window.event.srcElement;

// 獲取事件對(duì)象 兼容瀏覽器

 getEvent: function(e) {

  return e || window.event; // e事件對(duì)象 標(biāo)準(zhǔn)的獲取方式; window.event IE8以前獲取事件對(duì)象的方式

 }

// 兼容target

 getTarget: function(e) {

  return e.target || e.srcElement;

 }

7、獲取鼠標(biāo)在頁(yè)面上的位置

①在可視區(qū)域中的位置:  e.clientX   e.clientY

②在文檔中的位置: 

  i) e.pageX      e.pageY

  ii)瀏覽器兼容

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

 var pageY = e.clientY + scrollTop;

8、獲取頁(yè)面滾動(dòng)的距離

// 兼容瀏覽器

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

9、取消文本的選擇

// 兼容瀏覽器

 window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();

【總結(jié)】這里只是做了一部分的小結(jié),實(shí)際開發(fā)中也還會(huì)遇到各種瀏覽器兼容的問題。不同瀏覽器在PC端和手機(jī)端也會(huì)遇到不同適配問題,這些就有待童鞋們一起去發(fā)掘總結(jié)啦~~希望能幫到大家,不足的地方請(qǐng)多指教啦~~~

以上這篇淺析JavaScript中瀏覽器的兼容問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:淺析JavaScript中瀏覽器的兼容問題
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn)

版權(quán)所有:易賢網(wǎng)

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
国产精品麻豆久久久| 91一区二区在线观看| 一区二区三区在线观看网站| 中文字幕av免费专区久久| 不卡的av网站| 国产成人在线网站| 国产成人综合网| 成人亚洲精品久久久久软件| 成人小视频免费在线观看| 国产成人精品亚洲777人妖| 大胆欧美人体老妇| 91婷婷韩国欧美一区二区| 91蜜桃传媒精品久久久一区二区| 99国产精品国产精品毛片| 91福利精品视频| 91精品国产福利| 久久影音资源网| 国产精品欧美一级免费| 亚洲日本在线天堂| 午夜激情综合网| 九色综合狠狠综合久久| 成人三级伦理片| 色老头久久综合| 欧美一区二区成人6969| xfplay精品久久| 亚洲色图视频网| 日本不卡一区二区三区 | 亚洲美女精品一区| 亚洲一区二区成人在线观看| 久久99热狠狠色一区二区| 成人av高清在线| 91精品国产日韩91久久久久久| 久久精品视频在线免费观看| 亚洲精品视频在线观看免费| 日本一道高清亚洲日美韩| 丁香天五香天堂综合| 欧美日韩一区二区三区在线看 | 91精品国产品国语在线不卡| 久久看人人爽人人| 亚洲午夜免费视频| 国产一区二区三区综合| 色天使色偷偷av一区二区| xfplay精品久久| 香港成人在线视频| 91麻豆高清视频| 精品88久久久久88久久久| 亚洲一区免费观看| av色综合久久天堂av综合| 亚洲精品在线电影| 污片在线观看一区二区| 91亚洲国产成人精品一区二三| 久久在线免费观看| 午夜久久久久久久久| 99精品国产91久久久久久| 精品国产a毛片| 日韩成人伦理电影在线观看| 91行情网站电视在线观看高清版| 久久免费看少妇高潮| 免费人成在线不卡| 精品视频1区2区3区| 亚洲精品视频免费观看| 99久久精品免费看国产 | 一区二区三区四区视频精品免费 | 欧美一二三区在线| 亚洲国产乱码最新视频| 在线亚洲精品福利网址导航| 国产精品国产三级国产三级人妇 | 一区二区三区不卡视频在线观看 | 欧美女孩性生活视频| 亚洲中国最大av网站| 色诱亚洲精品久久久久久| 国产欧美日韩精品a在线观看| 国产在线国偷精品产拍免费yy| 欧美tk—视频vk| 国产在线精品免费av| 精品国内二区三区| 紧缚奴在线一区二区三区| 欧美一级欧美一级在线播放| 日韩成人av影视| 欧美一区二区三区婷婷月色| 日本在线不卡视频一二三区| 日韩欧美国产三级电影视频| 国产一区二区在线影院| 国产无人区一区二区三区| 国产suv精品一区二区三区| 国产精品久久久久久久久果冻传媒| 国产成人8x视频一区二区| 国产精品美女久久久久久久| 日本黄色一区二区| 日韩精品国产欧美| 久久奇米777| 91色.com| 青青草原综合久久大伊人精品优势| 久久精品国产免费看久久精品| 制服.丝袜.亚洲.中文.综合| 午夜成人免费视频| 日韩三级免费观看| 国产精品一卡二卡在线观看| 国产欧美日韩另类一区| 91国偷自产一区二区开放时间| 五月开心婷婷久久| 国产偷国产偷精品高清尤物 | 一区二区三区电影在线播| 欧美日本国产视频| 国产精品一区二区免费不卡| 国产精品成人免费精品自在线观看| 日韩欧美亚洲一区二区| 大胆亚洲人体视频| 亚洲与欧洲av电影| 精品久久免费看| 99re成人在线| 男女男精品网站| 国产精品美女久久久久久久久久久 | 日韩av网站在线观看| 欧美国产日韩在线观看| 欧美日韩激情在线| 成人亚洲一区二区一| 三级亚洲高清视频| 亚洲三级免费电影| 日韩一区二区在线观看视频播放| av网站一区二区三区| 久草中文综合在线| 白白色亚洲国产精品| 日韩精品一区二| 色综合久久综合| 精品一区二区三区免费观看| 一区二区国产视频| 国产欧美日韩精品a在线观看| 91麻豆精品国产| 欧美中文字幕一区二区三区| 高清日韩电视剧大全免费| 日韩电影一区二区三区| 亚洲国产一区视频| 中文字幕一区视频| 久久久不卡影院| 2020国产精品久久精品美国| 7777精品伊人久久久大香线蕉经典版下载 | av福利精品导航| 国模冰冰炮一区二区| 另类综合日韩欧美亚洲| 天堂va蜜桃一区二区三区漫画版| 亚洲欧美一区二区三区极速播放 | 欧美日本一道本在线视频| 成人激情综合网站| 国产成人午夜片在线观看高清观看| 午夜精品影院在线观看| 亚洲图片欧美色图| 一级做a爱片久久| 一区二区在线观看视频| 亚洲欧美乱综合| 亚洲人成小说网站色在线| 国产精品久久久久久久岛一牛影视| 国产农村妇女毛片精品久久麻豆| 久久久噜噜噜久久中文字幕色伊伊 | 久久精品视频在线看| 久久综合资源网| 久久久www成人免费无遮挡大片| 久久美女高清视频| 国产精品久久久久天堂| 中文字幕亚洲不卡| 一区二区三区国产精品| 亚洲一级在线观看| 日韩vs国产vs欧美| 国产麻豆精品视频| 成人免费av在线| 欧美亚男人的天堂| 精品日韩一区二区三区免费视频| 亚洲精品一区二区精华| 国产精品久久免费看| 一区二区免费在线| 国产女主播视频一区二区| 久久一留热品黄| 中文字幕视频一区| 一区二区三区色| 三级影片在线观看欧美日韩一区二区| 成人综合婷婷国产精品久久免费| 97国产一区二区| 欧美一区二区三区成人| 26uuu亚洲综合色| 国产精品嫩草影院com| 亚洲激情图片小说视频| 性久久久久久久久久久久| 国产一区啦啦啦在线观看| 99热这里都是精品| 欧美一级午夜免费电影| 中文字幕人成不卡一区| 五月激情综合色| 成人av综合一区| 欧美一级高清片| 亚洲欧美欧美一区二区三区| 精品一区二区日韩| 色婷婷激情综合| 久久美女艺术照精彩视频福利播放| 曰韩精品一区二区| 国产一区二区三区黄视频| 欧美视频一区二区三区四区| 国产偷v国产偷v亚洲高清| 热久久国产精品| 在线精品视频一区二区三四| 久久久亚洲高清|