我们在URL字符串中的出站链接中添加链接跟踪,该链接基于在页面上声明的全局变量,但需要能够仅修改其中一个链接以读取不同的值。例如,在下面的示例中,Ask,Bing,Duck Duck Go和Yahoo的所有链接都应附加值" webcampaign",例如:
http://www.ask.com/?group=&placement=webcampaign
http://www.bing.com/?group=&placement=webcampaign
http://www.duckduckgo.com/?group=&placement=webcampaign
http://www.yahoo.com/?group=&placement=webcampaign
但是,我们需要Google这样阅读:
http://www.google.com/?group=&placement=defLink
这是挑战。如何修改JavaScript以使Google链接的读取次数与其他链接不同?
这是一个简单的示例,其中所有链接都具有相同的URL字符串附件:
<html>
<head>
<title>Dynamic Link Test</title>
<script>
var placement = "webcampaign";
</script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="globalscripts_plain.js"></script>
</head>
<body>
<p><a href="http://www.ask.com">Ask</a></p>
<p><a href="http://www.bing.com">Bing</a></p>
<p><a href="http://www.duckduckgo.com">Duck Duck Go</a>
<p><a href="http://www.google.com" id="defLink">Google</a></p>
<p><a href="http://www.yahoo.com">Yahoo!</a></p>
</body>
</html>
这里是使用placement变量附加每个链接的脚本,该变量在标记的顶部声明:
(function($, undefined) {
var App = (window.App || (window.App = {}));
$.extend(App,{
getParameterByName : function (name) {},
});
$(function() {
$('a[href^="http"]').each(function() {
var $a = $(this),
q = $a.attr('href') ? $a.attr('href').indexOf('?') : -1,
contents = $a.html();
if (q == -1) {
$a.attr('href', $a.attr('href') + '?group=' + '&placement=' + placement);
} else {
$a.attr('href', $a.attr('href') + '&group=' + '&placement=' + placement);
}
});
});
})(window.jQuery);
JSFiddle链接:https://jsfiddle.net/Codewalker/v92L8pbw/1/
答案 0 :(得分:2)
可以简化一下并使用search
之类的锚标记属性来查看查询参数是否已经存在并使用attr(function)
公开现有的href值
var placement = "webcampaign";
$('a[href^="http"]').attr('href', function(_, oldHref) {
var placementVal = oldHref.indexOf('google.com') > -1 ? 'defLink' : placement;
var newQuery = this.search ? '&' : '?';
newQuery += 'group=&placement=' + placementVal;
return oldHref + newQuery;
})
的 DEMO 强>
答案 1 :(得分:1)
由于此代码是继承的,并且似乎是一次性修复:
请注意,Google <a>
标记的id属性为&#34; defLink&#34;。您可以使用它来定位.each
方法调用中的元素。
检查<a>
标记的ID何时等于{{1>} if语句或三元表达式,然后您可以更改附加的值如下:
"defLink"