【问题标题】:if querystring value exists remove param and reset url如果查询字符串值存在,则删除参数并重置 url
【发布时间】:2013-12-10 18:05:26
【问题描述】:

我的网址看起来像这样

/myurl?code1=abcde&code2=fghijk&code3=lmnop&code4=qrstu&code5=vwxyz(最多5个代码变量)

我有一个 onclick 事件,我在其中获取代码变量,例如在上面的示例中它返回“fghijk”,但我不知道参数,例如 code2。所以我想做两件事:

1) 从我的 url 中查找并删除参数和值(如果我的 onclick 变量返回 'fghijk',在上面的示例中,我的 url 变为 /myurl?code1=abcde&code3=lmnop&code4=qrstu&code5 =vwxyz)

2) 在此之后我想重置参数编号,以便我的代码参数从 1 开始顺序,所以在上面的数字 1 执行后,我的 url 应该变成 /myurl?code1=abcde&code2=lmnop&code3 =qrstu&code4=vwxyz

$('.myelement').on('click', function() {
  var url = $('.myelement a').attr('href');
  var codevar = $('.myelement span').text();
  if(url +'contains('+codevar+')') {
   // strip the param and variable from the url here

   // now reset the url so code params are in number sequence
  }

});

【问题讨论】:

  • 我可以更新一下吗,您的问题解决了吗?还是仍然有错误?

标签: javascript jquery


【解决方案1】:

你可以这样做:

$('.myelement').on('click', function() {
  var url = $('.myelement a').attr('href');
  var codevar = $('.myelement span').text();
  if(url.match(codevar)) {
   var queryString = url.substring(url.indexOf("?") + 1);
   var params = queryString.split("&");
   var codeIndex = 1;
   var newQuery = "";
   for (var i = 0; i < params.length; i++) {
     if (!params[i].match(codevar)) {
       newQuery += params[i].replace(/code[0-9]/, "code" + codeIndex);
       codeIndex++;
       if (i < params.length - 1) {
         newQuery += "&";
       }
     } 
   }
   url = url.replace(queryString, newQuery).replace(/&$/, ""); //new query string with the sequential parameters
  }

});

希望这会有所帮助。

问候,

马塞洛

【讨论】:

  • 这很好用,在我的示例中,我留下了一个尾随“&”,如果我从 url 中删除最后一个变量,我会留下一个 ?在我的网址末尾,如果它是最后一个,我该如何删除它?
【解决方案2】:
  var codevar = 'fghijk';
  var url = $('.myelement a').attr('href');
  var param = '&'+url.substring(url.indexOf('?')+1);
  url = url.substring(0,url.indexOf('?')+1);
  if(param.indexOf(codevar) > -1) {
      var arr = param.split("&code");
      param = '';
      for(var i = 1;i<arr.length;i++){
          if(codevar == arr[i].substring(2))
              arr.splice(i, 1);
          param += 'code'+i+'='+arr[i].substring(2);
          if(i != arr.length-1)
              param +='&';
      }
      $('.myelement a').attr('href',url+param);

例子:

http://jsfiddle.net/trevordowdle/b9Hmb/1/

【讨论】:

  • 差不多了,直到我到达最后一个变量,然后我得到 arr[i] 是未定义的,有什么想法吗?
  • @uknowit2 这个错误是否出现在我的小提琴中?你能用你的代码创造一个小提琴吗?您可以尝试在 for 循环中使用 ;i&lt;arr.length-1 而不是 ;i&lt;arr.length
【解决方案3】:

您可以使用参数作为键来拆分网址。

var el = $('.myelement'),
    out = $("#output");

el.on('click', function (ev) {
    ev.preventDefault();
    var href = el.find("a").prop("href"),
        param = el.find("span").text(),
        idx = href.indexOf(param),
        arr = [], url;

    if (idx > -1) {
        arr = href.split(param);  // split href[0] param href[1]
        url = arr.join("mynewvalue");
        out.text(url);
    }
});

演示http://jsfiddle.net/tive/EAsw3/

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多