2017-01-31 4 views
0

URL文字列の送信リンクにリンクトラッキングを追加します。URL文字列は、ページ上で宣言されたグローバル変数に基づいていますが、異なる値。たとえば、以下のサンプルでは、​​掲載し、ビング、ダックダックゴー、とYahooのためのすべてのリンクは、このような、値を「webcampaign」を追加する必要があります。1つのリンクにのみURL文字列変数を変更する

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 

ここに挑戦しています。 Googleのリンクが他のリンクと異なるようにJavaScriptを変更するにはどうすればよいですか?ここで

<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> 

マークアップの先頭で宣言された配置の変数、各リンクを追加スクリプトは次のとおりです:

ここではすべてのリンクが同じURL文字列付属しています簡単な例です

(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/このコードは継承され、かつ1オフの修正であるように思われているので

+0

あなたはjQueryのはとにかくリンクが異なるようにするにはそのすべてを行うだろう。ちょうどそれらをHTMLで変更してください。 jQueryを使用する必要がある場合は、 '.attr( 'href')'に対して 'RegExp'を使用するだけです。 – PHPglue

答えて

2

を簡素化することができますこのビットを使用してsearchのようなアンカータグプロパティを使用してクエリパラメータが既に存在するかどうかを確認し、既存のhref値を公開するattr(function)を使用します。

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

google <a>タグのid属性は「defLink」であることに注意してください。これを使用して、.eachメソッド呼び出しの要素をターゲットにすることができます。

声明または 三元表現であれば <a>タグのIDが "defLink"に等しい場合、その後、あなたは次のように追加された値に変更することができますチェック

$(function() { 
    $('a[href^="http"]').each(function() { 
    var $a = $(this), 
     q = $a.attr('href') ? $a.attr('href').indexOf('?') : -1, 
     contents = $a.html(), 
    // the next line overwrites the global value 
    // of placement if ID is defLink 
     placement = ($a.attr('id') === "defLink") ? "defLink":placement; 
    if (q == -1) { 
     $a.attr('href', $a.attr('href') + '?group=' + '&placement=' + placement); 
    } else { 
     $a.attr('href', $a.attr('href') + '&group=' + '&placement=' + placement); 
    } 
    }); 
}); 
関連する問題