【问题标题】:Replacing custom IDs of links based on query-string using javascript使用javascript根据查询字符串替换链接的自定义ID
【发布时间】:2011-12-24 23:11:11
【问题描述】:

如果当前页面 URL 在查询字符串中有一个参数“myid1”,对于我网页中具有类“重写”的每个链接,我希望将链接 href 的查询字符串替换为当前页面 URL 的查询字符串。

我正在使用以下代码:

<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script>

<script type="text/javascript">
            $(function() {
                var requestid = new String(gup('myid1'));
                if (requestid!=null&&requestid!="") {
                $("a.rewrite").each(function() {
                    var href = $(this).attr("href");
                    href += "?myid1=" + requestid;
                    $(this).attr("href", href);
                 })
               }
            })
            //gup taken from here:http://www.netlobo.com/url_query_string_javascript.html
            function gup(name) {
                name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
                var regexS = "[\\?&]" + name + "=([^&#]*)";
                var regex = new RegExp(regexS);
                var results = regex.exec(window.location.href);
                if (results == null)
                    return "";
                else
                    return results[1];
            }
</script>

<a href="http://www.otherdomain.com?someid=1234" class="rewrite">Hyperlink</a>

问题是 URS 的查询字符串被添加到链接中而没有删除现有的。如何解决?

另外,我如何允许多一个名为“myid2”的参数。提前感谢您的帮助。

【问题讨论】:

  • 关于myid2的问题的第二部分我不明白。
  • @jfriend00 我想添加另一个查询参数 (myid2),它应该与 myid1 完全一样。
  • 我还是不明白。您将所有现有查询参数替换为myid1。你想把myid2放在哪里?
  • 例如,如果我们去 test.html?myid2=9876 超链接应该变成otherdomain.com/?myid2=9876。现在这种变化只发生在 myid1 上。我希望它也发生在 myid2 上。

标签: javascript jquery html css url-rewriting


【解决方案1】:

您可以使用以下命令删除前一个查询字符串:

$(function() {
    var requestid = gup('myid1');
    if (requestid) {
        $("a.rewrite").each(function() {
            var base = this.href;
            var pos = base.indexOf("?");
            if (pos != -1) {
                base = base.substr(0, pos);
            }
            this.href = base + "?myid1=" + requestid;
        })
    }
})

本次修订有几点需要注意:

  1. if (requestid) 测试 nullundefined"",因此您可以只使用一个测试。
  2. 无需使用 jQuery 对象来访问href 属性。只使用this.href 会更快更直接。

如果你喜欢更少的代码行(虽然不是那么快),你可以这样做:

$(function() {
    var requestid = gup('myid1');
    if (requestid) {
        $("a.rewrite").each(function() {
            this.href = this.href.replace(/\?.*$/, "") + "?myid1=" + requestid;
        })
    }
})

【讨论】:

  • @starryeyes - 那是因为您对 requestid 的测试不起作用。我在答案中删除了new String(),现在应该允许if (requestid) 正常工作。
  • 太棒了!非常感谢 jfriend00 :)
  • 我喜欢更少的代码行,但是为什么你说它比第一个慢?
  • @starryeyes - 正则表达式几乎总是比直接字符串操作慢。通常,性能差异并不重要,但当速度很重要并且很容易避免使用正则表达式操作时,您应该这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2019-02-18
  • 2015-11-09
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多