動態

詳情 返回 返回

3分鐘搞定:獲取 URL 查詢參數值 - 動態 詳情

3分鐘搞定:獲取 URL 查詢參數值

在前端開發工作中,利用 URL 進行參數傳遞是一項十分常見的方法。在頁面跳轉時,通過 URL 攜帶某些信息,如狀態、id、區分頁面來源的字段值等。因此,學習瞭解如何獲取 URL 查詢參數值是很重要的。

js 代碼手擼

利用 JavaScript 代碼手擼一個函數,對 URL 查詢參數進行解析。這是方式靈活度高,可以進行更多個性化的操作。

const getSearchParams = (url) => {
  // 獲取查詢參數前的 ? 對應的索引位置
  const searchIndex = url.indexOf('?')
  // 截取出查詢參數字符串,並根據 & 將其分割成一個個 name=bruce 形式字符串組成的數組
  const searchParamsArray = url.slice(searchIndex + 1).split('&')
  // 遍歷數組,組成查詢參數對象
  return searchParamsArray.reduce((pre, cur) => {
    const [key, value] = cur.split('=')
    return {
      ...pre,
      // 需要使用 decodeURIComponent 對參數進行解碼
      [key]: decodeURIComponent(value),
    }
  }, {})
}

// { name: 'bruce', type: 'blog' }
getSearchParams('https://www.example.com?name=bruce&type=blog')

利用 URLSearchParams

const searchParams = new URLSearchParams('name=bruce&type=blog')

searchParams.get('name') // 'bruce'
searchParams.get('type') // 'blog'
searchParams.has('type') // true

要把所有查詢參數轉換為對象,需要搭配使用 entries()Object.fromEntries() 方法。

entries() 方法返回一個 iterator,還需進一步轉換為對象。

const searchEntries = searchParams.entries();
Object.fromEntries(searchEntries) // { name: 'bruce', type: 'blog' }

需要注意的是,URLSearchParams 只能解析查詢字符串,不能解析完整的 URL。因此若要使用其解析查詢參數,需要事先提取出 URL 地址的查詢字符串。

const params = new URLSearchParams('https://www.example.com?name=bruce&type=blog')

params.get('name') // null
params.get('https://www.example.com?name') // 'bruce'

參考鏈接:MDN-URLSearchParams

利用 URL

const params = new URL('https://www.example.com?name=bruce&type=blog')
const searchParams = params.searchParams

searchParams.get('name') // 'bruce'
searchParams.get('type') // 'blog'

URL 可對 URL 地址進行更多維度的解析,其中 searchParamsURLSearchParams 返回的對象相同。

image.png

參考鏈接:MDN-URL

user avatar toopoo 頭像 cyzf 頭像 Leesz 頭像 smalike 頭像 linlinma 頭像 front_yue 頭像 jingdongkeji 頭像 kobe_fans_zxc 頭像 dirackeeko 頭像 chongdianqishi 頭像 banana_god 頭像 hard_heart_603dd717240e2 頭像
點贊 189 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.