2013-10-30 59 views
0

我的功能:如何使我的jQuery函數與.each()在它更短?

$('a[href$=".pdf"]').each(function() { 
     var $linkText = $(this).text(); 
     $(this).attr('onclick', "_gaq.push(['_trackEvent','" + $linkText + "','click']);"); 
    }); 

    $('a[href$=".doc"]').each(function() { 
     var $linkText = $(this).text(); 
     $(this).attr('onclick', "_gaq.push(['_trackEvent','" + $linkText + "','click']);"); 
    }); 

的部分是重複的:

var $linkText = $(this).text(); 
     $(this).attr('onclick', "_gaq.push(['_trackEvent','" + $linkText + "','click']);"); 

我怎樣才能取出這些部件到外部函數,這樣我就會有這樣的事情:

$('a[href$=".xls"]').each(function (index, value) {    
     AddGoogleTracking(value); 
    }); 

function AddGoogleTracking(value) { 
    var $linkText = value.text(); 
    $(this).attr('onclick', "_gaq.push(['_trackEvent','" + $linkText + "','click']);"); 
} 
+0

不要設置'使用jQuery onclick'屬性。通過['on'](http://api.jquery.com/on)使用事件綁定,而不是 – zzzzBov

回答

4

你可以一起同時選擇:

$('a[href$=".pdf"], a[href$=".doc"]'); 

您還可以通過直接添加單擊處理程序,這樣的簡化:

$('a[href$=".pdf"], a[href$=".doc"]').click(function() { 
    _gaq.push(['_trackEvent', $(this).text(), 'click']); 
}); 

這可能是給你想跟蹤一個公共類中的任何鏈接,以簡化進一步一個好主意,這樣你就可以選擇他們的方式:

$('.track-link').click(...); 
+0

逗號與選擇兩種語法都很容易錯過(特別是如果您經常使用更長的選擇器),所以我肯定會添加普通類 – Izkata

0

不要添加[onclick]屬性,不重複選擇時相同的函數體適用於兩個。

不要使用.on()click事件綁定到匹配的元素:

$('a[href$=".pdf"], a[href$=".doc"]').on('click', function() { 
    window._gaq.push(['_trackEvent', $(this).text(), 'click']); 
}); 
相關問題