繁体   English   中英

删除url参数JavaScript

[英]Remove url param javascript

我需要做这个网址

http://test.com/deal/134487/some-deal-id?sourceType=by_category&somestring=true&anotherparam=true

看起来像这样

http://test.com/deal/134487/some-deal-id?somestring=true&anotherparam=true

我只想删除sourceType并保留其他所有内容

到目前为止,这是我拥有的功能,当url为http://test.com/deal/134487/some-deal-id?sourceType=by_category时,它看起来很棒,但是由于在sourceType之后添加了更多键,因此没有任何反应。 另外,我也在Google跟踪代码管理器中运行此代码,因此无法刷新页面

   (function () {
    var sourceType;
    var query = parseQuery(window.location.search);
    var history = window.history
    delete query.sourceType 
    var search = stringifyQuery(query);
    if (window.location.search) {
      sourceType = window.location.search
          .substr(1)
          .split('&')
          .filter(function (i) {return ~i.indexOf('sourceType=')})
          .map(function (i) {return i.split('=')[1] })[0]
     history && history.replaceState && history.replaceState(history.state, null, window.location.pathname + search)
    }
  })()  

  function parseQuery (locationSearch) {
  if (typeof locationSearch !== 'string' || !locationSearch.length) {
    return {}
  }

  var query = {}
  locationSearch.substr(1).split('&').forEach(function (partStr) {
    var parts = partStr.split('=')
    var key = parts[0]
    var val = decodeURIComponent(parts[1])
    if (query.hasOwnProperty(key)) {
      var existingVal = query[key]
      if (existingVal instanceof Array) {
        existingVal.push(val)
      } else {
        query[key] = [existingVal, val]
      }
    } else {
      query[key] = val
    }
  })
  return query
}

function stringifyQuery (query) {
  if (!query) return ''

  return '?' + Object.keys(query).map(function (key) {
    var val = query[key]
    if (val instanceof Array) {
      return val.map(function (valPart) {
        return [key, encodeURIComponent(valPart)].join('=')
      }).join('&')
    } else {
      return [key, encodeURIComponent(val)].join('=')
    }
  }).join('&')
}

从您提供的上述src无法理解太多。 如果您要从网址中删除查询字符串,以下内容可以为您提供帮助

window.location.href = window.location.href.split('?')[0];

该行将拆分,并为您提供没有查询字符串的URL。

好的,这似乎可行

所以如果我的网址是https://test.com/deal/141788/colored-tempered-glass-iphone-screen-protector?sourceType=by_content&somestring=true&moreparams=true

我希望它看起来像https://test.com/deal/141788/colored-tempered-glass-iphone-screen-protector?somestring=true&moreparams=true

 function changeUrl()  {
      var sourceType;
      var query = parseQuery(window.location.search);
      var history = window.history
      delete query.sourceType
      var search = stringifyQuery(query);
      history && history.replaceState && history.replaceState(history.state, null, window.location.pathname + search)
      }


  function parseQuery(locationSearch) {
      if (typeof locationSearch !== 'string' || !locationSearch.length) {
          return {}
      }

      var query = {}
      locationSearch.substr(1).split('&').forEach(function(partStr) {
          var parts = partStr.split('=')
          var key = parts[0]
          var val = decodeURIComponent(parts[1])
          if (query.hasOwnProperty(key)) {
              var existingVal = query[key]
              if (existingVal instanceof Array) {
                  existingVal.push(val)
              } else {
                  query[key] = [existingVal, val]
              }
          } else {
              query[key] = val
          }
      })
      return query
  }

  function stringifyQuery(query) {
      if (!query) return ''

      return '?' + Object.keys(query).map(function(key) {
          var val = query[key]
          if (val instanceof Array) {
              return val.map(function(valPart) {
                  return [key, encodeURIComponent(valPart)].join('=')
              }).join('&')
          } else {
              return [key, encodeURIComponent(val)].join('=')
          }
      }).join('&')
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM