茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    一些實(shí)用性較高的js方法
    來源:易賢網(wǎng) 閱讀:1402 次 日期:2016-07-08 10:02:07
    溫馨提示:易賢網(wǎng)小編為您整理了“一些實(shí)用性較高的js方法”,方便廣大網(wǎng)友查閱!

    這篇文章主要為大家分享了一些實(shí)用性較高的js方法,方便大家開發(fā)時(shí)使用,感興趣的小伙伴們可以參考一下

    本文分享下自己平時(shí)積累的一些實(shí)用性較高的js方法,供大家指點(diǎn)和評(píng)價(jià)。本想分篇介紹,發(fā)現(xiàn)有點(diǎn)畫蛇添足。整理了下也沒多少拿得出手的方法,自然有一些是網(wǎng)上看到的個(gè)人覺得很有實(shí)用性的方法,在這里一起貼出來供大家探討。

    1、點(diǎn)擊返回若沒有之前頁面則跳轉(zhuǎn)到規(guī)定頁面

    首先是客戶需求中要求——單個(gè)分享到微信的頁面,點(diǎn)擊返回可以跳轉(zhuǎn)到網(wǎng)站首頁。

    期間這個(gè)功能有和客戶探討過,能否在頁面中添加回到首頁按鈕進(jìn)行跳轉(zhuǎn)。

    可是這種方式無法作用到每個(gè)頁面,并且指明需要該功能的分享頁面沒有可以放得下一個(gè)圖標(biāo),又不影響美觀的地方了。于是,本人只好是尋求度娘。度娘上也盡是一些打著擦邊球的功能。

    所以通過自己的嘗試 有了以下代碼:

    //返回之前沒頁面則返回首頁

    function pushHistory() {

      //獲取瀏覽器歷史記錄棧中的記錄個(gè)數(shù)

      //由于頁面加載的時(shí)候就會(huì)將當(dāng)前頁面壓入棧中 所以判斷是否小于2

      if (history.length < 2) {

        var state = {

          title: "index",

          url: getHttpPrefix + "index.html"

        };

        window.history.pushState(state, "index", getHttpPrefix + "index.html");

        state = {

          title: "index",

          url: ""

        };

        window.history.pushState(state, "index", "");

      }

    }

    再將下面這段代碼加入頁面ready事件中:

    setTimeout(function () {

        pushHistory()

        window.addEventListener("popstate", function (e) { 5       if (window.history.state !=null&&window.history.state.url != "") {

            location.href = window.history.state.url  

          }

        });

      }, 300);

    具體功能就是判斷之前是否有頁面,若沒有就將制定網(wǎng)站的鏈接地址插入state(這里用的是首頁),然后再監(jiān)聽popstate事件,進(jìn)行相應(yīng)功能的操作。

    這段代碼可能還有一些小問題,所以打算是貼出來有人可以一起探討和完善。

    2、便捷log方法

    相信大家頁面調(diào)試的時(shí)候早已經(jīng)厭煩了console.log()略顯啰嗦的敲打長度。有些人可能會(huì)使用快捷輸入進(jìn)行快速輸入(如:輸入cl編譯環(huán)境智能跳出console)。不過在等到項(xiàng)目發(fā)布的時(shí)候 看到許多忘記刪掉的調(diào)試信息,還是會(huì)難以清除。所以本人干脆寫了個(gè)方法 用來專門處理這種情況。

    function lll() {

      //全局變量_debug用來控制調(diào)試信息開關(guān)

      if (_debug) {

        var arr = [];

        //arguments是方法的參數(shù)集合 這樣做是為了不限制參數(shù)的個(gè)數(shù),方便調(diào)試

        for (_item in arguments) {

          //由于個(gè)人習(xí)慣字符串信息就顯示在一行里所以對(duì)字符串進(jìn)行了篩選拼接

          if (typeof _item == "String") {

            arr.push(_item)

          } else {

            console.log(_item)

          }

        }

        if(arr.length>0)console.log(arr.join(','))

      }

    }

    其實(shí)還有點(diǎn)不滿意的就是 沒辦法自動(dòng)獲取到參數(shù)的名字不然就可以這樣使用:  

    var a = 123, b = 333, obj = { name: "name", content: "..." }

     lll(a, b, obj)//調(diào)試信息為: a:123,b:123

            //obj:

            //{ name: "name", content: "..." }

    看起來是不是就更加明白點(diǎn)了?

    3、獲取瀏覽器定位信息(支持移動(dòng)端)

    接到很多的項(xiàng)目都是移動(dòng)端定制開發(fā)的,所以經(jīng)常會(huì)用到需要定位當(dāng)前地點(diǎn)的信息。

    可是網(wǎng)上很多的接口都是需要引用一段外部js的比如百度的api,微信的api等等。

    我接下來介紹一種不需要引用外部js,只需要向外部API鏈接提交參數(shù)就可以獲取定位的方法:

    if (getCookie('position') == "") {

        if (navigator.userAgent.indexOf("MicroMessenger") > -1) {//判斷是否是微信端,具體視情況而定

          navigator.geolocation.getCurrentPosition(function getPositionSuccess(position) {

            //通過html5的navigator.geolocation接口 獲取瀏覽器的當(dāng)前定位 (移動(dòng)端最準(zhǔn)確,PC會(huì)有較大偏差)

            var lat = position.coords.latitude;//獲取過來的當(dāng)前緯度

            var lng = position.coords.longitude;//獲取過來的當(dāng)前經(jīng)度

            var arr = []

            arr.push(lng)

            arr.push(lat)

            //alert(position)

            $.ajax({

              type: "GET",

              url: "http://api.map.baidu.com/geocoder/v2/?ak=oM55dVWVwLUU7shkz7uY8M6E&callback=renderReverse&location=" + lat + "," + lng + "&output=json&pois=1",//將經(jīng)緯度通過地址欄參數(shù)的形式 傳給百度提供的api

              beforeSend: function () {

                //由于這段過程需要些時(shí)間 所以最好頁面上有加載提示

                iosload()//本人寫的頁面加載動(dòng)畫

              },

              data: {},

              dataType: "jsonp",//由于是跨域傳輸 所以需要以jsonp的形式進(jìn)行傳輸

              jsonpCallback: "renderReverse",//類似跨域傳輸?shù)臉?biāo)識(shí) 需要接收方和傳輸方做好統(tǒng)一

              success: function (data) {

                ios.hide();

                //alert(data)

                $("#myposition").html("我在:" + data.result.addressComponent.city)

                setCookie("position", data.result.addressComponent.city, 24 * 60 * 30)

              }

            })

      }, function (error) {

        //alert(error.message);

      }, {})

      }

    }

    這段代碼是本人實(shí)際項(xiàng)目中的一段代碼,由于需要判斷是否已經(jīng)獲取到定位信息,不能每次頁面加載都進(jìn)行一次獲取 所以我用Cookie將定位信息保存了起來

    剛開始的時(shí)候判斷是否有當(dāng)前的定位信息cookie,沒有。再判斷是否是在移動(dòng)端(因?yàn)轫?xiàng)目是微信端的,所以我這里只是做了微信端的驗(yàn)證)

    然后再調(diào)用html5提供的接口參數(shù) 進(jìn)行數(shù)據(jù)傳輸,將百度返回過來的jsonp進(jìn)行處理。由于我項(xiàng)目里只需要獲取定位的城市信息 所以這里只是舉了獲取城市的例子。

    4、獲取字符串?dāng)?shù)值部分

    因?yàn)轫?xiàng)目上我只負(fù)責(zé)功能的實(shí)現(xiàn),所以很多頁面并不是我自己搭的,但是 又會(huì)有些生手來搭出一些很不好獲取標(biāo)簽內(nèi)的數(shù)值的情況。

    比如:

    <div>原價(jià)998現(xiàn)在只要

      <a>99.8!</a>

     </div>

    像這種頁面,有時(shí)候要獲取里面的998或者98。就會(huì)變的有點(diǎn)麻煩。

    通過我下面提供的方法,可以很方便的解決這種情況

    function getNum(text) {

      var value = text.replace(/[^(0-9).]/ig, "");

      return parseFloat(value);

    }

    這段方法很簡短,實(shí)質(zhì)上就是通過正則去匹配。將非數(shù)字或者小數(shù)點(diǎn)的字符替換成空的字符串(實(shí)際上就是刪除)

    這樣返回過來的數(shù)據(jù)就是我們想要的數(shù)字,我最后又進(jìn)行了一次轉(zhuǎn)換為浮點(diǎn)型的操作,這是為了方便將數(shù)據(jù)進(jìn)行后期處理。比如保留兩位小數(shù),四舍五入 等等。

    5、獲取設(shè)備信息

    //#region 獲取設(shè)備信息

    var browser = {

      versions: function () {

        var u = navigator.userAgent, app = navigator.appVersion;

        return {

          trident: u.indexOf('Trident') > -1, //IE內(nèi)核

          presto: u.indexOf('Presto') > -1, //opera內(nèi)核

          webKit: u.indexOf('AppleWebKit') > -1, //蘋果、谷歌內(nèi)核

          gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐內(nèi)核

          mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否為移動(dòng)終端

          ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios終端

          android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android終端或者uc瀏覽器

          iPhone: u.indexOf('iPhone') > -1, //是否為iPhone或者QQHD瀏覽器

          iPad: u.indexOf('iPad') > -1, //是否iPad

          webApp: u.indexOf('Safari') == -1, //是否web應(yīng)該程序,沒有頭部與底部

          weixin: u.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增)

          qq: u.match(/\sQQ/i) == " qq" //是否QQ

        };

      }(),

      language: (navigator.browserLanguage || navigator.language).toLowerCase()

    }

    //實(shí)際使用的時(shí)候如下:

    if (browser.versions.webKit) {

      //為蘋果 谷歌內(nèi)核執(zhí)行的代碼...

    }

    //#endregion

    這里也是分享一個(gè)不是我寫的 也是在網(wǎng)上看到的一個(gè)封裝成對(duì)象的判斷設(shè)備信息的方式。

    個(gè)人覺得很好用,于是也拿來跟大家分享一下。

    字符串?dāng)U展方法——以下介紹的都是對(duì)String類型數(shù)據(jù)進(jìn)行附加的方法

    1.將字符串超出指定長度部分隱藏

    /*

    將字符串以指定長度顯示,多余部分以省略號(hào)顯示(len--顯示長度

    defaultStr--若字符串為空顯示的字符串)

    */

    String.prototype.splitString = function (len, defaultStr) {

      var result = "";

      var str = this.toString()

      if (str) {

        str = str.trim()

        if (str.length > len) {

          result = str.substring(0, len) + "...";

        }

        else {

          result = str;

        }

      }

      else {

        result = defaultStr;

      }

      return result;

    }

    注釋已經(jīng)夠簡單明了了。不理解的可以留言,博主看到一定回復(fù)。

    2.將字符串長度減一

    //長度減一

     String.prototype.delLast = function () {

       return this.substring(0, this.length - 1)

     }

    有些人可能會(huì)覺得 這個(gè)方法有點(diǎn)脫褲子放屁的嫌疑,其實(shí)真正的項(xiàng)目中 會(huì)經(jīng)常需要這個(gè)操作。

    與其寫一段長長的substring 不如咱們寫個(gè)方法將代碼精簡,并且在碼代碼的時(shí)候 也很方便 直接在對(duì)應(yīng)的字符串后面 輕輕一點(diǎn),選擇delLast就行。

    一句話,用過都說好!

    3.將數(shù)字型字符串補(bǔ)全指定長度

    //給數(shù)字型字符串固定指定長度

    String.prototype.addZero = function (n) {

      var num = this

      var len = num.toString().length;

      while (len < n) {

        num = '0' + num;

        len++;

      }

      return num;

    }

    看注釋可能有點(diǎn)不理解 其實(shí)就是加入這個(gè)字符串是 "2",通過這個(gè)擴(kuò)展方法 可以這么操作 "2".addZero(2)

    那么返回過來的就是"02"這樣的字符串。

    用過都說好!

    4.將數(shù)據(jù)庫DateTime類型轉(zhuǎn)換為Date

    String.prototype.DTD = function () {

      return new Date(Date.parse(this.toString().replace(/-/g, "/")))

    }

    5.用戶昵稱省略 

    //用戶昵稱省略

     String.prototype.telHide = function () {

       var name = this

       return name.substr(0, 1) + "****" + name.substring(name.length - 1, name.length)

     }

    以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:一些實(shí)用性較高的js方法
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)