如果当前页面URL在查询字符串中有一个参数'myid1'或'myid2',对于我的网页中每个具有'rewrite'类的链接,我希望链接href的查询字符串被当前页面URL的查询字符串替换。我正在使用下面给出的代码。由于我是javascript的新手,我不确定它是否已经过优化。我希望它尽快执行。请帮忙。在此先感谢:)
<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 = 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;
})
}
var requestid2 = gup('myid2');
if (requestid2) {
$("a.rewrite").each(function() {
var base = this.href;
var pos = base.indexOf("?");
if (pos != -1) {
base = base.substr(0, pos);
}
this.href = base + "?myid2=" + requestid2;
})
}
})
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.website.com/?someid=1234" class="rewrite">Hyperlink</a>
答案 0 :(得分:0)
$(function() {
var requestid = gup('myid1');
var requestid2 = gup('myid2');
if (requestid || requestid2) {
$("a.rewrite").each(function() {
var base = this.href;
var pos = base.indexOf("?");
if (pos != -1) {
base = base.substr(0, pos);
}
if (requestid){
this.href = base + "?myid1=" + requestid;
if (requesid2){
this.href += "?myid2=" + requestid;
}
} else {
this.href = base + "?myid2=" + requestid;
}
})
}
});
答案 1 :(得分:0)
不必要的循环。它每次循环a.rewrite
锚点以进行一次查询字符串匹配。它可以优化为一个循环;
重复计算。每个regexS
函数都会执行gup
,并且可以将其缩减为一个计算。
将window.location.href
数据提取到一个可以在以后引用的变量中;
将两个(或多个)循环合二为一,并在一个循环中完成所有替换。
//First you fetch the query string as key-value pairs in the window.location.href, this equals your gup function.
//This code, fetch the ?key1=value1&key2=value2 pair into an javaScript Object {'key1': 'value1', 'key2':'value2'}
var queryString = {};
var queryStringPattern = new RegExp("([^?=&]+)(=([^&]*))?", "g");
window.location.href.replace(
queryStringPattern,
function($0, $1, $2, $3) { queryString[$1] = $3; }
);
//Second you collect all the anchor with class rewrite and execute the replacement.
$("a.rewrite").each(function () {
this.href.replace(
queryStringPattern,
function ($0, $1, $2, $3) {
return queryString[$1] ? $1 + "=" + queryString[$1] : $1 + '=' + $3;
}
)
});