Change URL parameters

前端 未结 26 2454
孤独总比滥情好
孤独总比滥情好 2020-11-22 08:40

I have this URL:

site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc

what I need is to be able to

26条回答
  •  日久生厌
    2020-11-22 08:56

    I just wrote a simple module to deal with reading and updating the current url query params.

    Example usage:

    import UrlParams from './UrlParams'
    
    UrlParams.remove('foo') //removes all occurences of foo=?
    UrlParams.set('foo', 'bar') //set all occurences of foo equal to bar
    UrlParams.add('foo', 'bar2') //add bar2 to foo result: foo=bar&foo=bar2
    UrlParams.get('foo') //returns bar
    UrlParams.get('foo', true) //returns [bar, bar2]
    

    Here is my code named UrlParams.(js/ts):

    class UrlParams {
    
        /**
         * Get params from current url
         * 
         * @returns URLSearchParams
         */
        static getParams(){
            let url = new URL(window.location.href)
            return new URLSearchParams(url.search.slice(1))
        }
    
        /**
         * Update current url with params
         * 
         * @param params URLSearchParams
         */
        static update(params){
            if(`${params}`){
                window.history.replaceState({}, '', `${location.pathname}?${params}`)
            } else {
                window.history.replaceState({}, '', `${location.pathname}`)
            }
        }
    
        /**
         * Remove key from url query
         * 
         * @param param string
         */
        static remove(param){
            let params = this.getParams()
            if(params.has(param)){
                params.delete(param)
                this.update(params)
            }
        }
    
        /**
         * Add key value pair to current url
         * 
         * @param key string
         * @param value string
         */
        static add(key, value){
            let params = this.getParams()
            params.append(key, value)
            this.update(params)
        }
    
        /**
         * Get value or values of key
         * 
         * @param param string
         * @param all string | string[]
         */
        static get(param, all=false){
            let params = this.getParams()
            if(all){
                return params.getAll(param)
            }
            return params.get(param)
        }
    
        /**
         * Set value of query param
         * 
         * @param key string
         * @param value string
         */
        static set(key, value){
            let params = this.getParams()
            params.set(key, value)
            this.update(params)
        }
    
    }
    export default UrlParams
    export { UrlParams }
    

提交回复
热议问题