window.location.search 為何在url 帶# 號時獲取不到 ?


  1. 我們在獲取url參數時,會常常用到截取參數
getUrlParam(name) {
				const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)') // 構造一個含有目標參數的正則表達式對象
				const r = window.location.search.substr(1).match(reg) // 匹配目標參數
				if (r != null) {
					return unescape(r[2]) // 返回參數值
				} else {
					return null
				}
			}

2. 但這樣 window.location.search 這樣常常會獲取不到。

原因是; search只能在取到“?”后面和“#”之前的內容,如果“#”之前沒有“?”search取值為空。它默認參數和#是一個字符串

3.完善

    function getQueryString(key)
    {
        var after = window.location.search;
        if(after.indexOf('?') === -1) return null; //如果url中沒有傳參直接返回空

        //key存在先通過search取值如果取不到就通過hash來取
        after = after.substr(1) || window.location.hash.split("?")[1];

        if(after)
        {
            var reg = new RegExp("(^|&)"+ key +"=([^&]*)(&|$)");
            var r = after.match(reg);
            if(r != null)
            {
                return  decodeURIComponent(r[2]);
            }
            else
            {
                return null;
            }
        }
    }

  4.對於沒有#號url ,最好的是方法是:

let data = {};
				let src = window.location.href
				let index = src.indexOf("?");
				if (index === -1) {
					return data;
				}
				let dataStr = src.substring(src.indexOf("?") + 1);
				let dataArray = dataStr.split("&");
				for (let i = 0; i < dataArray.length; i++) {
					let param = dataArray[i].split("=");
					data[param[0]] = param[1];
				}
// urlData 是{} 放在data中。
				this.urlData = data

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM