【问题标题】:jQuery: How to remove query string from a link?jQuery:如何从链接中删除查询字符串?
【发布时间】:2012-07-18 14:13:47
【问题描述】:

如何从链接的 url 中删除查询字符串?例如我有

<a href="http://example.com/somepath/anotherpath?title=dog">The Link</a>

如何使用 javascript/jquery 从网址中仅删除 ?title=dog

【问题讨论】:

    标签: javascript jquery query-string


    【解决方案1】:

    您只需更改Location 对象的search property,即可从链接中删除查询字符串。

    $("#your_link")[0].search = "";
    

    演示:http://jsfiddle.net/uSrmg/1/

    或者如果您需要定位多个元素:

    $("a.someclass").each(function() {
     this.search = "";   
    });
    

    演示:http://jsfiddle.net/uSrmg/4/


    如果您希望解析任意 URL 以删除查询字符串,您可以反转 this post 中解释的技巧。例如:

    function remove_qs(url) {
        var a = document.createElement('a'); // dummy element
        a.href = url;   // set full url
        a.search = "";  // blank out query string
        return a.href;
    }
    

    这应该是相当健壮的,因为它使用Location 对象进行所有解析。

    用法示例:http://jsfiddle.net/uSrmg/


    【讨论】:

    • 好吧,这看起来真的很接近,但是如果 url 像我更新的示例中那样包含路径,我怎样才能让它工作?
    • 糟糕.. 是的。现在我的问题是我的页面上有一堆链接,我需要从中删除查询字符串。您的第一个示例中的代码仅适用于第一个链接。
    • 好了!这样就可以了 :) 非常感谢!
    【解决方案2】:

    还有另一种方法可以将搜索替换为空白。

    String(document.location.href).replace("&title=dog", "");
    

    【讨论】:

      【解决方案3】:

      从锚标记中删除查询字符串:

      var anchor = $('#yourAnchor');
      var href = anchor.attr('href');
      
      if (href.indexOf('?') !== -1) {
         anchor.attr('href', href.split('?')[0]);
      }
      

      【讨论】:

      • 检查href 属性是否包含? 字符是不必要的 - 如果分隔符不存在,.split() 将简单地返回一个包含单个元素(整个字符串)的数组。
      • @AnthonyGrist 直到另一个开发人员决定复制此代码并在其他地方使用它,从而引入错误。如果有的话,应该有关于这种行为的评论而不是 if 语句。
      • 如果他们这样做是他们的问题,在我看来,在你的代码中包含不必要的检查是一个非常糟糕的理由。
      【解决方案4】:
      var url=$('a').attr('href').split('?')[0];
      

      拆分“?”并获得第一项。如果要更改页面上所有链接的 url,则可以使用以下代码:

      $('a').each(function(i,el){ 
          $(el).attr('href', $(el).attr('href').split('?')[0]);
      });
      

      【讨论】:

      • 这将为您提供基本 URL,而不是查询字符串 - 您的意思是 [1],但您可能需要添加一些防弹措施,以防 href 没有 ? 字符。
      • @jbabey 他们要删除查询字符串,所以返回基本 URL 是正确的。
      • 对不起,url中也会有路径。我已经更新了我的问题以反映这一点。
      • 嗯,由于某种原因,我收到此错误.. Uncaught TypeError: Cannot call method 'indexOf' of undefined (anonymous function) (anonymous function)
      • 我的代码中没有indexOf,你的意思是回复jbabey的回答吗?我的功能有效:jsfiddle.net/2jqWA
      【解决方案5】:

      您可以在页面加载时将查询字符串从 url 拆分为:-

      $(function(){
        if(Modernizr.history)
        {
          history.replaceState({},"",location.href.split("?")[0]);
        }
      });
      

      【讨论】:

        【解决方案6】:

        这段代码对我有用:

        var url = "www.foo.com/test?name=kevin&gender=Male&id=1234";
        
        var res = url.replace("&gender=Male", "");
        
        window.location.href =res;
        

        通过javascript在url中拆分特定的字符串查询参数

        【讨论】:

          猜你喜欢
          • 2013-06-30
          • 2018-12-08
          • 2019-01-14
          • 1970-01-01
          • 2016-06-25
          • 2015-11-28
          • 2018-04-20
          • 2013-06-03
          相关资源
          最近更新 更多