首頁 web前端 js教程 一些實用性較高的js方法_javascript技巧

一些實用性較高的js方法_javascript技巧

May 16, 2016 pm 03:04 PM

本文分享下自己平時累積的一些實用性較高的js方法,供大家指點和評估。本想分篇介紹,發現有點畫蛇添足。整理了下也沒多少拿得出手的方法,自然有一些是網路上看到的個人覺得很有實用性的方法,在這裡一起貼出來供大家探討。

1、點選返回若沒有之前頁面則跳到規定頁

  首先是客戶需求中要求-單一分享到微信的頁面,點選返回可以跳到網站首頁。

  期間這個功能有和客戶探討過,能否在頁面中添加回到首頁按鈕進行跳轉。

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

  所以透過自己的嘗試 有了以下程式碼:

//返回之前没页面则返回首页
function pushHistory() {
  //获取浏览器历史记录栈中的记录个数
  //由于页面加载的时候就会将当前页面压入栈中 所以判断是否小于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);

登入後複製

具體功能就是判斷之前是否有頁面,若沒有就將制定網站的連結位址插入state(這裡用的是首頁),然後再監聽popstate事件,進行對應功能的操作。

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

 2、便利log方法

  相信大家頁面調試的時候早已經厭煩了console.log()略顯囉嗦的敲打長度。有些人可能會使用快捷輸入進行快速輸入(如:輸入cl編譯環境智能跳出console)。不過在等到專案發佈的時候 看到許多忘記刪掉的調試訊息,還是會難以清除。所以本人乾脆寫了個方法 用來專門處理這種情況。

function lll() {
  //全局变量_debug用来控制调试信息开关
  if (_debug) {
    var arr = [];
    //arguments是方法的参数集合 这样做是为了不限制参数的个数,方便调试
    for (_item in arguments) {
      //由于个人习惯字符串信息就显示在一行里所以对字符串进行了筛选拼接
      if (typeof _item == "String") {
        arr.push(_item)
      } else {
        console.log(_item)
      }
    }
    if(arr.length>0)console.log(arr.join(','))
  }
}
登入後複製

   其實還有點不滿意的就是 沒辦法自動取得到參數的名字不然就可以這樣使用:  

var a = 123, b = 333, obj = { name: "name", content: "..." }
 lll(a, b, obj)//调试信息为: a:123,b:123
        //obj:
        //{ name: "name", content: "..." }
登入後複製

   看起來是不是就更明白點了?

3、 取得瀏覽器定位資訊(支援行動端)

   接到很多的專案都是行動端客製開發的,所以常常會用到需要定位目前地點的資訊。

  可是網路上很多的介面都是需要引用一段外部js的比如百度的api,微信的api等等。

  我接下來介紹一種不需要引用外部js,只需要向外部API連結提交參數就可以取得定位的方法:

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

    if (navigator.userAgent.indexOf("MicroMessenger") > -1) {//判断是否是微信端,具体视情况而定
      navigator.geolocation.getCurrentPosition(function getPositionSuccess(position) {
        //通过html5的navigator.geolocation接口 获取浏览器的当前定位 (移动端最准确,PC会有较大偏差)
        var lat = position.coords.latitude;//获取过来的当前纬度
        var lng = position.coords.longitude;//获取过来的当前经度
        var arr = []
        arr.push(lng)
        arr.push(lat)
        //alert(position)
        $.ajax({
          type: "GET",
          url: "http://api.map.baidu.com/geocoder/v2/&#63;ak=oM55dVWVwLUU7shkz7uY8M6E&callback=renderReverse&location=" + lat + "," + lng + "&output=json&pois=1",//将经纬度通过地址栏参数的形式 传给百度提供的api
          beforeSend: function () {
            //由于这段过程需要些时间 所以最好页面上有加载提示
            iosload()//本人写的页面加载动画
          },
          data: {},
          dataType: "jsonp",//由于是跨域传输 所以需要以jsonp的形式进行传输
          jsonpCallback: "renderReverse",//类似跨域传输的标识 需要接收方和传输方做好统一
          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);
  }, {})
  }
}

登入後複製

 這段程式碼是本人實際專案中的一段程式碼,由於需要判斷是否已經獲取到定位信息,不能每次頁面加載都進行一次獲取 所以我用Cookie將定位信息保存了起來

剛開始的時候判斷是否有目前的定位資訊cookie,沒有。再判斷是否是在行動端(因為專案是微信端的,所以我這裡只是做了微信端的驗證)

然後再呼叫html5提供的介面參數 進行資料傳輸,將百度傳回過來的jsonp進行處理。由於我專案裡只需要獲取定位的城市資訊 所以這裡只是舉了獲取城市的例子。

4、 取得字串數值部分

  因為專案上我只負責功能的實現,所以很多頁面並不是我自己搭的,但是 又會有些生手來搭出一些很不好獲取標籤內的數值的情況。

  例如:

<div>原价998现在只要
  <a>99.8!</a>
 </div>
登入後複製

像這種頁面,有時候要取得裡面的998或98。就會變的有點麻煩。

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

 function getNum(text) {
   var value = text.replace(/[^(0-9).]/ig, "");
   return parseFloat(value);
 }
登入後複製

這段方法很簡短,實質上就是透過正規去匹配。將非數字或小數點的字元替換成空的字串(實際上就是刪除)

這樣回傳的資料就是我們想要的數字,我最後又進行了一次轉換為浮點型的操作,這是為了方便將資料進行後製。例如保留兩位小數,四捨五入 等等。

5、取得設備資訊

//#region 获取设备信息

var browser = {
  versions: function () {
    var u = navigator.userAgent, app = navigator.appVersion;
    return {
      trident: u.indexOf('Trident') > -1, //IE内核
      presto: u.indexOf('Presto') > -1, //opera内核
      webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
      gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,//火狐内核
      mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
      ios: !!u.match(/\(i[^;]+;( U;)&#63; 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应该程序,没有头部与底部
      weixin: u.indexOf('MicroMessenger') > -1, //是否微信 (2015-01-22新增)
      qq: u.match(/\sQQ/i) == " qq" //是否QQ
    };
  }(),
  language: (navigator.browserLanguage || navigator.language).toLowerCase()
}

//实际使用的时候如下:
if (browser.versions.webKit) {
  //为苹果 谷歌内核执行的代码...
}

//#endregion

登入後複製

這裡也是分享一個不是我寫的 也是在網上看到的一個封裝成對象的判斷設備資訊的方式。

個人覺得很好用,於是也拿來跟大家分享一下。

字串擴充方法-以下介紹的都是對String型資料進行附加的方法

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

/*
将字符串以指定长度显示,多余部分以省略号显示(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;
}
登入後複製

註解已經夠簡單明了。不理解的可以留言,博主看到一定回覆。

2.將字串長度減一

//长度减一
 String.prototype.delLast = function () {
   return this.substring(0, this.length - 1)
 }
登入後複製

有些人可能会觉得 这个方法有点脱裤子放屁的嫌疑,其实真正的项目中 会经常需要这个操作。

与其写一段长长的substring 不如咱们写个方法将代码精简,并且在码代码的时候 也很方便 直接在对应的字符串后面 轻轻一点,选择delLast就行。

一句话,用过都说好!

3.将数字型字符串补全指定长度

//给数字型字符串固定指定长度
String.prototype.addZero = function (n) {
  var num = this
  var len = num.toString().length;
  while (len < n) {
    num = '0' + num;
    len++;
  }
  return num;
}
登入後複製

看注释可能有点不理解 其实就是加入这个字符串是 "2",通过这个扩展方法 可以这么操作 "2".addZero(2)

那么返回过来的就是"02"这样的字符串。

用过都说好!

4.将数据库DateTime类型转换为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)
 }
登入後複製

以上就是本文的全部内容,希望对大家的学习有所帮助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在JavaScript中替換字符串字符 在JavaScript中替換字符串字符 Mar 11, 2025 am 12:07 AM

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

如何創建和發布自己的JavaScript庫? 如何創建和發布自己的JavaScript庫? Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

如何在瀏覽器中優化JavaScript代碼以進行性能? 如何在瀏覽器中優化JavaScript代碼以進行性能? Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

如何使用瀏覽器開發人員工具有效調試JavaScript代碼? 如何使用瀏覽器開發人員工具有效調試JavaScript代碼? Mar 18, 2025 pm 03:16 PM

本文討論了使用瀏覽器開發人員工具的有效JavaScript調試,專注於設置斷點,使用控制台和分析性能。

立即提高jQuery性能的10種方法 立即提高jQuery性能的10種方法 Mar 11, 2025 am 12:15 AM

本文概述了十個簡單的步驟,可以顯著提高腳本的性能。 這些技術很簡單,適用於所有技能水平。 保持更新:使用bundler(例如vite)的npm等軟件包經理來確保

如何構建簡單的jQuery滑塊 如何構建簡單的jQuery滑塊 Mar 11, 2025 am 12:19 AM

本文將引導您使用jQuery庫創建一個簡單的圖片輪播。我們將使用bxSlider庫,它基於jQuery構建,並提供許多配置選項來設置輪播。 如今,圖片輪播已成為網站必備功能——一圖胜千言! 決定使用圖片輪播後,下一個問題是如何創建它。首先,您需要收集高質量、高分辨率的圖片。 接下來,您需要使用HTML和一些JavaScript代碼來創建圖片輪播。網絡上有很多庫可以幫助您以不同的方式創建輪播。我們將使用開源的bxSlider庫。 bxSlider庫支持響應式設計,因此使用此庫構建的輪播可以適應任何

如何使用源地圖調試縮小JavaScript代碼? 如何使用源地圖調試縮小JavaScript代碼? Mar 18, 2025 pm 03:17 PM

本文說明瞭如何使用源地圖通過將其映射回原始代碼來調試JAVASCRIPT。它討論了啟用源地圖,設置斷點以及使用Chrome DevTools和WebPack之類的工具。

使用Passport與semelize和MySQL 使用Passport與semelize和MySQL Mar 11, 2025 am 11:04 AM

續集是一個基於承諾的node.js orm。它可以與PostgreSQL,MySQL,MariadB,Sqlite和MSSQL一起使用。在本教程中,我們將為Web應用程序的用戶實施身份驗證。我們將使用Passport,Passport,Midderw的流行身份驗證

See all articles