我有一个页面,其中包含一系列类似于以下代码的链接:
<a href="http://www.domain.com/page/other.jsf?fruit=apple&tree=pine&rock=sedimentary">click me</a>
这些参数会轻微地操纵最终链接到的页面("other.jsf")的内容。
作为 A/B/n 测试的一部分,我想根据包含链接的页面上的用户行为来更改 href 中的参数。例如,在点击链接之前,我想将水果参数更改为“橙色”。
我的问题是,这些参数在字符串中可能会更改位置,或者对于某些链接可能根本不存在,而 .param() 函数似乎只适用于 URL。
到目前为止(基于另一个问题的答案),我有以下代码,但它没有考虑到可能没有 "end_pos" 或如果 href 中缺少 "fruit="(尽管第二个问题似乎更容易通过 if 未定义类型函数解决):
$('a').each(function () {
if ($(this).attr('href').indexOf('other') > -1) {
var hrefStr = $(this).attr('href');
var start_pos = hrefStr.indexOf('fruit=') + 1;
var end_pos = hrefStr.indexOf('&',start_pos); //works as long as fruit=apple is in the middle or front of the string
var fruit = hrefStr.substring(start_pos,end_pos);
...
//put modified href back in <a>
}
});
我的第二个问题是如何识别原始链接中相同的部分,以将新字符串放回去。不过,我想在了解提取它的方法之后可以解决这个问题。
另外,我应该说我无法通过JavaScript以外的方式控制 .jsf 页面。