我有一个页面,上面有一系列<a>
链接,如下所示:
<a href="http://www.domain.com/page/other.jsf?fruit=apple&tree=pine&rock=sedimentary">click me</a>
这些参数以较小的方式处理链接到(“ other.jsf”)的最终页面的内容。
作为A / B / n测试的一部分,我想根据包含链接的页面上的用户行为来更改href中的参数。因此,例如,我想在单击它之前将fruit参数更改为“ orange”。
我的问题是参数更改了字符串中的位置或对于某些链接可能根本不存在,并且.param()函数似乎仅对URL有效。
到目前为止(基于另一个问题的答案),我有这个问题,但它不能说明是否可能没有“ end_pos”或href中缺少“ fruit =“(尽管第二点似乎更容易)使用if undefined-type函数修复):
$('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>
}
});
然后,我的第二个问题是确定原始href的相同部分以将新字符串放回去。我可能首先了解了提取方法之后就可以得到它。
我还应该说,除了通过JavaScript之外,我无法控制.jsf页面
您可以使用Attribute Contains Selector [name * =“ value”] "a[href*=fruit]"
来选择a
包含"fruit"
athref
属性的元素.attr(attributeName, function)
,String.prototype.replace()
以替换"apple"
为"orange"
$("a[href*=fruit]").attr("href", function(_, href) {
return href.replace(/apple/, "orange")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<a href="http://www.domain.com/page/other.jsf?fruit=apple&tree=pine&rock=sedimentary">click me</a>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句