如何使用.each()缩短我的jQuery函数?

时间:2013-10-30 18:06:59

标签: jquery

我的功能:

    $('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']);");
}

2 个答案:

答案 0 :(得分:4)

您可以同时选择两者:

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

您也可以通过直接添加点击处理程序来简化,如下所示:

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

通过提供您想要跟踪公共类的任何链接来简化进一步可能是一个好主意,因此您可以这样选择它们:

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

答案 1 :(得分:0)

不要添加[onclick]属性,当相同的函数体适用于两者时,不要重复选择器。

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

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