仅更改一个链接的URL字符串变量

时间:2017-01-31 23:38:41

标签: javascript

我们在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/

2 个答案:

答案 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"