// 獲取地址欄參數
getUrl(obj, bool) { // 該方法使用說明在底部
let urlObj = {}
let str = location.href
if (str.indexOf('?') != -1) {
// 獲取地址欄參數
let num = str.indexOf("?")
str = str.substr(num + 1)
let arr = str.split("&")
arr.forEach(item => {
let query = item.split("=")
urlObj[query[0]] = JSON.parse(decodeURI(query[1]))
})
// 設置回調值
if (!obj) {
return urlObj
}
if (typeof(obj) == 'string') { // obj為字符串時,bool表示希望得到的值類型:Number(數字類型)、String(字符串類型),默認 String
if (bool) {
return bool(urlObj[obj])
} else {
return urlObj[obj]
}
} else { // 參數為數組對象,bool表示 是否 僅return傳遞的參數;true:表示僅 return 傳遞的參數,false 表示處理傳遞的參數並返回所有地址欄參數,默認false
// bool = true/false
// obj = [{
// name: '參數名稱'/['', '', ...],
// concat: '', // name為數組時,合並name內字段值,新生成的數組名稱
// type: '希望得到的值類型', Number/String // type可不設置,默認String
// delete: true, // 是否忽略該參數而得到地址欄其他參數,默認false
// }
// ......
// ]
if (bool) { // 僅return傳遞的參數
let onlyObj = {}
obj.forEach(key => {
if (typeof(key.name) == 'string') { // name為字符串
if (urlObj[key.name] !== undefined) {
if (key.type) {
onlyObj[key.name] = key.type(urlObj[key.name])
} else {
onlyObj[key.name] = urlObj[key.name]
}
}
} else { // name為數組
onlyObj[key.concat] = []
key.name.forEach(item => {
if (urlObj[item]) {
onlyObj[key.concat].push(urlObj[item])
}
})
}
})
return onlyObj
} else { // 非僅return傳遞的參數
obj.forEach(key => {
if (typeof(key.name) == 'string') { // name為string
if (urlObj[key.name] !== undefined) {
if (key.type) {
urlObj[key.name] = key.type(urlObj[key.name])
} else {
urlObj[key.name] = urlObj[key.name]
}
if (key.delete) {
delete urlObj[key.name]
}
}
} else { // name為數組
urlObj[key.concat] = []
key.name.forEach(item => {
if (urlObj[item]){
if (key.type) {
urlObj[key.concat].push(key.type(urlObj[item]))
} else {
urlObj[key.concat].push(urlObj[item])
}
}
})
}
})
return urlObj
}
}
} else {
if (typeof(obj) == 'string') {
return ''
} else {
return {}
}
}
}
// ————————————————————————————————————————————————————————————————————使用說明
getUrl(obj, bool) {} 獲取地址欄參數
(示例地址欄:http://office.youxiake.com/v2/card/order?id=1&status=2)
1-1、當什么都不傳時,return地址欄所有參數
示例: commonJs.getUrl('id') // {id: '1', status: '2'}
1-2、當 obj='' 字符串時,bool: 表示希望得到的值類型:Number/String,默認String
示例: commonJs.getUrl('id') // '1'
commonJs.getUrl('id', Number) // 1
1-3、當obj=[{}]數組對象時,bool表示 是否 僅return傳遞的參數;true:表示僅 return 傳遞的參數,false 表示處理傳遞的參數並返回所有地址欄參數,默認false
obj = [{
name: '參數名稱' / ['參數名稱',...], // 參數名稱,name為數組時會合並name內的值並生成新的數組(必傳)
concat: '', // name為數組時,合並name內字段值,新生成的數組名稱(非必傳)
type: '', // 希望得到的該值類型:Number/String,默認 String(非必傳)
delete: true, // 是否忽略該參數而得到地址欄其他參數,默認false(非必傳)
}
......
]
示例:commonJs.getUrl([{name: 'id'}], true) // {id: '1'}
commonJs.getUrl([{name: 'id', type: Number}], true) // {id: 1}
commonJs.getUrl([{name: 'id', type: Number}]) // {id: 1, status: '2'}
commonJs.getUrl([{name: ['id', 'status'], concat: 'concatName', type: Number}]) // {concatName: [1, 2]}