admin管理员组

文章数量:1293645

I have this URL

;sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id1=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request

Here I am getting sys_id two times with different parameters. So I need to remove the second & sign and all text after that.

I tried this

location.href.split('&')[2] 

I am sure it doesn't work. Can anyone provide some better solution?

I have this URL

https://myApp-ajj./sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id1=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request

Here I am getting sys_id two times with different parameters. So I need to remove the second & sign and all text after that.

I tried this

location.href.split('&')[2] 

I am sure it doesn't work. Can anyone provide some better solution?

Share Improve this question edited Jul 13, 2018 at 15:43 matiit 8,0175 gold badges43 silver badges65 bronze badges asked Jul 13, 2018 at 12:40 krishkrish 1,1176 gold badges26 silver badges53 bronze badges 7
  • window.location.href – treyBake Commented Jul 13, 2018 at 12:41
  • My first question would be why does the url have two parameters with the same name – user115014 Commented Jul 13, 2018 at 12:44
  • 1 Having the same parameters twice or more is not invalidating URLs. Why would you need to remove it? – Below the Radar Commented Jul 13, 2018 at 12:48
  • a = '&sys_id' b = location.href.split(a) c = b[0]+a+b[1] – gtato Commented Jul 13, 2018 at 12:51
  • 2 Keep in mind the parameters may change order so if you just trim everything after the second & you may lose data. – Marie Commented Jul 13, 2018 at 13:22
 |  Show 2 more ments

7 Answers 7

Reset to default 6

Firstly, you should split the string into an array then use slice to set the starting index number of the element which is 2 in your case and then join the array again into the string.

Read more about these methods JavaScript String split() Method, jQuery slice() Method and JavaScript Array join() Method

var url = 'https://myApp-ajj./sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request';

url = url.split("&").slice(0,2).join("&");
console.log(url);

Maybe like this:

var url='https://myApp-ajj./sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request';

var first=url.indexOf('&');
var second=url.indexOf('&',first+1);
var new_url=url.substring(0,second);
console.log(new_url);

You need to find the 2nd occurrence of &sys_id. From there onwards remove all text.

Below is working code:

let url='https://myApp-ajj./sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request';

let str1=url.indexOf('&sys_id');
let str2=url.indexOf('&sys_id',str1+1);
console.log(url.substring(0,str2));

This is a bit more verbose, but it handles all duplicate query params regardless of their position in the URL.

function removeDuplicateQueryParams(url) {
  var params = {};
  var parsedParams = '';
  var hash = url.split('#'); // account for hashes
  var parts = hash[0].split('?');
  var origin = parts[0];
  var retURL;
  
  // iterate over all query params
  parts[1].split('&').forEach(function(param){
    // Since Objects can only have one key of the same name, this will inherently
    // filter out duplicates and keep only the latest value.
    // The key is param[0] and value is param[1].
    param = param.split('=');
    params[param[0]] = param[1];
  });
  
  Object.keys(params).forEach(function(key, ndx){
    parsedParams += (ndx === 0)
      ? '?' + key +'='+ params[key]
      : '&' + key +'='+ params[key];
  });
  
  return origin + parsedParams + (hash[1] ? '#'+hash[1] : '');
}

console.log( removeDuplicateQueryParams('http://fake.?q1=fu&bar=fu&q1=fu&q1=diff') );
console.log( removeDuplicateQueryParams('http://fake.?q1=fu&bar=fu&q1=fu&q1=diff#withHash') );

var url = "https://myApp-ajj./sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id1=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request"
url = url.slice(0, url.indexOf('&', url.indexOf('&') + 1));
console.log(url);

Try this :)

Try this:

var yourUrl = "https://myApp-ajj./sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request"
var indexOfFirstAmpersand = yourUrl.search("&"); //find index of first &
var indexOfSecondAmpersand = indexOfFirstAmpersand + yourUrl.substring((indexOfFirstAmpersand + 1)).search("&") + 1; //get index of second &
var fixedUrl = yourUrl.substring(0, indexOfSecondAmpersand)
$(".answer").text(fixedUrl);
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="answer">
</p>

You can manipulate the url using String.prototype.substring method. In the example below I created a function that takes a url string and checks for a duplicate parameter - it returns a new string with the second occurrence removed.

var url = "https://myApp-ajj./sp?id=cat_item&sys_id=cf9f149cdbd25f00d080591e5e961920&sys_id=cf9f149cdbd25f00d080591e5e961920&sysp_Id=a691acd9dbdf1bc0e9619fb&sysparm_CloneTable=sc_request&sysparm_CloneTable=sc_request";

function stripDuplicateUrlParameter(url, parameterName) {
  //get the start index of the repeat occurrance
  var repeatIdx = url.lastIndexOf('sys_id');
  var prefix = url.substring(0, repeatIdx);
  var suffix = url.substring(repeatIdx);
  //remove the duplicate part from the string
  suffix = suffix.substring(suffix.indexOf('&') + 1);

  return prefix + suffix;
}

console.log(stripDuplicateUrlParameter(url));

This solves your specific problem, but wouldn't work if the parameter occurred more than twice or if the second occurrence of the string wasn't immediately following the first - you would probably write something more sophisticated.

As someone already asked - why is the url parameter being duplicated in the string anyway? Is there some way to fix that? (because the question asked seems to me to be a band-aid solution with this being the root issue).

本文标签: javascriptHow to remove amp sign and all text after that from urlStack Overflow