<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>
已建议服务器端解决方案,但不是我可用于此特定项目的选项。在编码方面我也非常新,并且需要尽可能简单明了地解释出来。
答案 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 。如果你不熟悉它们并且认为你不需要为将来学习它们,你可以使用我提供的代码而忘记正则表达式。这是一个非常沉重的东西,当你刚接触编码时,绝对不是一件好事。但它仍然能完美地完成这项工作。
在HTML页面的HEAD section中,您需要包含以下代码:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"></script>
这会从最近的位置向访问者加载最新的jQuery JavaScript library。它用于快速识别锚标签(A)并根据需要进行必要的修改。
我们需要创建一个新的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),此脚本就可以使用。