如何根据url选择器替换部分href链接

时间:2011-01-31 19:48:23

标签: jquery html

<a class="change_this" href="http://www.site1.com">Link 1 Type 1</a>
<a class="change_this" href="http://MyID.site1.com">Link 1 Type 2</a>
<a class="change_this" href="http://www.site2.com/?refid=myid2">Link 2 Type 1</a>
<a class="change_this" href="http://www.site2.com/myid2/">Link 2 Type 2</a>
<a href="http://www.site3.com/">Nothing changes</a>

我在示例页面example.html中有上面的html

我需要弄清楚如何根据传递给url的url字符串选择器来替换www,MyID和myid2。

例如,如果有人访问example.html&amp; cid = alt1?sid = alt2,则网址会更改为

<a class="change_this" href="http://alt1.site1.com">Link 1 Type 1</a>
<a class="change_this" href="http://alt1.site1.com">Link 1 Type 2</a>
<a class="change_this" href="http://www.site2.com/?refid=alt2">Link 2 Type 1</a>
<a class="change_this" href="http://www.site2.com/alt2/">Link 2 Type 2</a>
<a href="http://www.site3.com/">Nothing changes</a>

已建议服务器端解决方案,但不是我可用于此特定项目的选项。在编码方面我也非常新,并且需要尽可能简单明了地解释出来。

2 个答案:

答案 0 :(得分:0)

参考:Get Querystring values with jquery,看看第二个答案。

以上引用的答案中的以下代码将从网址中提取所有qs值,并允许您按键检索值。

<script language="javascript">
var urlParams = {};
(function () {
    var e,
        a = /\+/g,  // Regex for replacing addition symbol with a space
        r = /([^&;=]+)=?([^&;]*)/g,
        d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
        q = window.location.search.substring(1);

    while (e = r.exec(q))
       urlParams[d(e[1])] = d(e[2]);
})();

urlParams = {
    enc: " Hello ",
    i: "main",
    mode: "front",
    sid: "de8d49b78a85a322c4155015fdce22c4",
    empty: ""
}

alert(urlParams["mode"]);
</script>

将此添加到您的页面以使用上述内容以及完成您要查找的内容:

<script>
$(document).ready(function () {
{
  $('a').each(function(index) {

    var href = $(this).attr("href").text();

    var newHref = href.replace('myid2', urlParams["sid"]);

    $(this).attr("href").text(newHref); 
  } 
}
);
</script>

答案 1 :(得分:0)

欢迎来到社区: - )

由于我要提供的答案是复杂,我将在代码中为您提供尽可能多的注释。实际上 - 只有那些评论真正使这个答案如此长,而不是代码本身:-D

首先,我的回答使用 regular expressions 。如果你不熟悉它们并且认为你不需要为将来学习它们,你可以使用我提供的代码而忘记正则表达式。这是一个非常沉重的东西,当你刚接触编码时,绝对不是一件好事。但它仍然能完美地完成这项工作。


第1步 - 包括jQuery库

在HTML页面的HEAD section中,您需要包含以下代码:

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"></script>

这会从最近的位置向访问者加载最新的jQuery JavaScript library。它用于快速识别锚标签(A)并根据需要进行必要的修改。


第2步 - 创建functions.js文件

我们需要创建一个新的JavaScript文件并将其命名为functions.js - 您可以选择任何其他名称以满足您的偏好。此文件将包含函数,用于从您的URL中提取GET数据(即“sid”和“cid”)。它还将包含在浏览器中加载文档时要执行的部分代码,因此可以替换所有现有链接。

// function to extract GET data from the URL
// source: 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];
}

// this bit will find all anchors with the class "change_this",
// check what type of URL they point to and replace them accordingly
$('a.change_this').each(function() {
    // assign the jQuery representation of current anchor
    // into a variable, so jQuery does not have to build
    // the object for it again later
    var e = $(this);

    // get HREF attribute - the URL
    var e_href = e.attr('href');

    // assign "cid" GET parameter to alt1 and "sid" to alt2 variables
    var alt1 = gup('cid');
    var alt2 = gup('sid');

    // if our HREF attribute matches scheme where myid2 is at the end of link,
    // we will do the neccessary replacements using a regular expression below
    if (e_href.match(/http:\/\/[^\/\n]+\/.[^=\/]+/)) {
            // these are regular expressions and replacement routines
            e_href = e_href.replace(/\?refid=.+/g, 'refid='+alt2);
            e_href = e_href.replace(/(http:\/\/[^\/]+\/)[^\/]+(\/.*?)/g, "$1"+alt2+"$2");
    } else {
            // we have a link that contains a "www" or some "MyID" string
            // at the beginning and DOES NOT contain any myid2 parts at the end
            e_href = e_href.replace(/http:\/\/[^.]*./g, 'http://'+alt1+'.');
    }

    // finally, we assign our replaced value to the HREF attribute
    e.attr('href', e_href);
});

别担心,代码中只有很多评论,这就是为什么它看起来如此可怕:-D

现在你需要在HEAD部分(我们之前添加的)jQuery脚本中包含 functions.js 文件 AFTER

    <script type="text/javascript" src="functions.js"></script>

完成这些步骤后,您应该得到所需的结果。

请注意“myid2”(如在site2.com/?refid=myid2 或site2.com/ myid2 /)不一定是“myid2” - 任何ID标识符都将被匹配和替换。

同样适用于www.site1.com或MyID.site1.com - 只要最后没有其他标识符(例如site1.com/?hello=1),此脚本就可以使用。