HTML怎么用JS獲取URL參數?queryString解析與應用教程

獲取url參數的方法有三種:1.自定義函數解析,通過分割字符串提取鍵值對并處理編碼;2.使用urlsearchparams對象,通過get和getall方法獲取參數;3.頁面跳轉時通過拼接url或合并新舊參數保留參數。第一種方法需手動處理分割與解碼且無法直接支持多同名參數,但可通過數組存儲解決;第二種方法更簡潔且內置解碼功能;第三種方法在跳轉時動態生成包含舊參數的新url以實現參數保留。

HTML怎么用JS獲取URL參數?queryString解析與應用教程

獲取URL參數,簡單來說就是從瀏覽器地址欄里提取問號后面的東西,然后拆解成JS可以用的對象。這事兒看似簡單,但用處可大了,比如頁面跳轉后保留搜索條件,或者根據URL里的ID加載不同的數據。

HTML怎么用JS獲取URL參數?queryString解析與應用教程

function getQueryStringParams() {   const params = {};   const search = window.location.search.substring(1); // 去掉問號   if (search) {     search.split('&').forEach(pair => {       const [key, value] = pair.split('=');       params[key] = decodeURIComponent(value || ''); // 解碼,處理特殊字符     });   }   return params; }  const urlParams = getQueryStringParams(); console.log(urlParams.id); // 假設URL里有id參數

這段代碼首先獲取URL的search部分,也就是問號后面的字符串。然后,把它按&分割成鍵值對,再按=分割鍵和值。decodeURIComponent是為了處理URL編碼的字符,比如空格會被編碼成%20。

HTML怎么用JS獲取URL參數?queryString解析與應用教程

如何處理URL中多個相同參數名的情況?

有時候,URL里會有多個相同名字的參數,比如?tag=JavaScript&tag=html&tag=css。上面的代碼只能獲取到最后一個tag的值。要處理這種情況,需要稍微修改一下代碼:

立即學習前端免費學習筆記(深入)”;

function getQueryStringParams() {   const params = {};   const search = window.location.search.substring(1);   if (search) {     search.split('&').forEach(pair => {       let [key, value] = pair.split('=');       value = decodeURIComponent(value || '');       if (params[key]) {         if (Array.isArray(params[key])) {           params[key].push(value);         } else {           params[key] = [params[key], value];         }       } else {         params[key] = value;       }     });   }   return params; }  const urlParams = getQueryStringParams(); console.log(urlParams.tag); //  ["javascript", "html", "css"]

這段代碼會檢查params對象里是否已經存在同名的鍵。如果存在,并且已經是一個數組,就直接把新的值push進去;如果存在但不是數組,就把原來的值和新的值一起放到一個數組里。

HTML怎么用JS獲取URL參數?queryString解析與應用教程

除了自己寫函數,還有什么更方便的方法獲取URL參數?

現代瀏覽器提供了一個更方便的API:URLSearchParams。用它可以更簡潔地獲取URL參數:

const urlParams = new URLSearchParams(window.location.search); console.log(urlParams.get('id')); // 獲取單個參數 console.log(urlParams.getAll('tag')); // 獲取所有同名參數  // 還可以遍歷所有參數 for (const [key, value] of urlParams.entries()) {   console.log(`${key}: ${value}`); }

URLSearchParams的優勢在于它更簡潔,而且已經內置了URL解碼的功能,不需要手動調用decodeURIComponent。

如何在頁面跳轉時保留URL參數?

一個常見的需求是在頁面跳轉后,保持原來的URL參數。比如,從商品列表頁跳轉到商品詳情頁,需要把商品ID傳過去。這可以通過在跳轉鏈接里拼接參數來實現:

<a href="product.html?id=123">查看商品</a>

或者,用JS動態生成URL:

const productId = 123; window.location.href = `product.html?id=${productId}`;

更復雜的情況是,需要在跳轉時合并新的參數和舊的參數。可以先獲取舊的參數,然后合并到新的參數里,再生成新的URL。

function mergeParamsAndredirect(url, newParams) {   const urlParams = new URLSearchParams(window.location.search);   for (const key in newParams) {     urlParams.set(key, newParams[key]);   }   window.location.href = `${url}?${urlParams.toString()}`; }  // 示例:跳轉到product.html,同時保留舊的參數,并添加新的參數 mergeParamsAndRedirect('product.html', { category: 'electronics' });

這種方法可以確保在頁面跳轉后,所有的參數都被保留下來。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享