Js Url 拆解

249 阅读1分钟

JsUrl地址拆解,并转换 serchData, queryData

export const urlSplet = function(url) {
  var temp = {
    // 默认地址
    default: url,
    // 协议
    deal: '',
    origin: '',
    originAndPath: '',
    path: '',
    search: '',
    searchData: '',
    hash: '',
    query: '',
    queryData: '',
    hashPath: ''
  }
  var left = ''
  if (url.lastIndexOf('#') !== -1) {
    left = url.slice(0, url.lastIndexOf('#'))
    temp.hash = url.slice(url.lastIndexOf('#'))
  } else {
    left = url
  }
  var paramsToObj = function(params) {
    var obj = {}
    var searchArr = params.split('&')
    searchArr.forEach(v => {
      var index = v.indexOf('=')
      if (index !== -1) {
        var name = v.substring(0, index)
        var val = v.substring(index + 1, v.length)
        obj[name] = val
      }
    })
    return obj
  }
  if (left.indexOf('?') !== -1) {
    temp.search = left.slice(left.lastIndexOf('?'))
    temp.searchData = paramsToObj(temp.search.replace('?', ''))
    temp.originAndPath = left.slice(0, left.lastIndexOf('?'))
  } else {
    temp.originAndPath = left
  }
  var originAndPathSplit0 = temp.originAndPath.split('//')
  temp.deal = originAndPathSplit0[0]
  var originAndPathSplit1 = originAndPathSplit0[1]
  var pathSplit = originAndPathSplit1.split('/')
  temp.origin = temp.deal + '//' + pathSplit[0]
  for (var i = 1; i < pathSplit.length; i++) {
    if (pathSplit[i]) {
      temp.path += '/' + pathSplit[i]
    }
  }
  if (temp.hash) {
    if (temp.hash.indexOf('?') !== -1) {
      temp.query = temp.hash.slice(temp.hash.indexOf('?'))
      temp.queryData = paramsToObj(temp.query.replace('?', ''))
      temp.hashPath = temp.hash.slice(0, temp.hash.indexOf('?'))
    } else {
      temp.hashPath = temp.hash
    }
  }
  return temp
}