JavaScript中如何移除查詢字串參數?
P粉239164234
P粉239164234 2023-08-20 18:46:10
0
2
490
<p>有沒有比使用正規表示式更好的方法來從URL字串的查詢字串中刪除參數的標準JavaScript? </p> <p>到目前為止,這是我想到的方法,在我的測試中似乎有效,但我不喜歡重新發明查詢字串解析! </p> <pre class="brush:php;toolbar:false;">function RemoveParameterFromUrl(url, parameter) { if (typeof parameter == "undefined" || parameter == null || parameter == "") throw new Error("parameter is required"); url = url.replace(new RegExp("\b" parameter "=[^&;] [&;]?", "gi"), ""); // 移除任何剩餘的垃圾 url = url.replace(/[&;]$/, ""); return url; }</pre></p>
P粉239164234
P粉239164234

全部回覆(2)
P粉163465905

現代瀏覽器提供了URLSearchParams#介面來處理搜尋參數。此介面具有delete方法,可以根據名稱刪除參數。

if (typeof URLSearchParams !== 'undefined') {
  const params = new URLSearchParams('param1=1&param2=2&param3=3')
  
  console.log(params.toString())
  
  params.delete('param2')
  
  console.log(params.toString())

} else {
  console.log(`您的浏览器 ${navigator.appVersion} 不支持URLSearchParams`)
}
P粉506963842
"[&;]?" + parameter + "=[^&;]+"

看起來很危險,因為參數 'bar' 會匹配:

?a=b&foobar=c

此外,如果 parameter 中包含任何在正規表示式中有特殊意義的字符,例如 '.',這個正規表示式就會失敗。而且它不是全域正規表示式,所以只會刪除一個參數的實例。

我不會使用簡單的正規表示式來做這個,我會解析參數並丟棄不需要的參數。

function removeURLParameter(url, parameter) {
    //如果你有一个location/link对象,最好使用l.search
    var urlparts = url.split('?');   
    if (urlparts.length >= 2) {

        var prefix = encodeURIComponent(parameter) + '=';
        var pars = urlparts[1].split(/[&;]/g);

        //反向迭代可能会破坏性
        for (var i = pars.length; i-- > 0;) {    
            //字符串.startsWith的习惯用法
            if (pars[i].lastIndexOf(prefix, 0) !== -1) {  
                pars.splice(i, 1);
            }
        }

        return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');
    }
    return url;
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板