0

私の質問は簡単です。これは私のコードですが、このコードを改善/短縮するにはどうすればよいですか?

それらは多くの点で似ていることがわかりました。そのため、ここで質問しています。

ここに私のコードがあり、助けていただければ幸いです。

$(".follow-link").click(function(event) {
    event.preventDefault();
    var therel = $(this).attr('rel');
    var followID = $(this).attr('rel').replace(/[^0-9]/g, '');
    var thisfollow = $(this);
    $.ajax({
        url: '/ajax/follow.php',
        type: 'POST',
        data: {followwho : followID},
        dataType: 'json',
        success: function(data){
            if (data.status) {
                $('a[rel="' + therel + '"]').hide();
                $('a[rel="' + therel + '"]').parent().children('.unfollow-link').fadeIn();
            }
        }
    });
});

$(".unfollow-link").click(function(event) {
    event.preventDefault();
    var therel = $(this).attr('rel');
    var followID = $(this).attr('rel').replace(/[^0-9]/g, '');
    var thisfollow = $(this);
    $.ajax({
        url: '/ajax/unfollow.php',
        type: 'POST',
        data: {followwho : followID},
        dataType: 'json',
        success: function(data){
            if (data.status) {
                $('a[rel="' + therel + '"]').hide();
                $('a[rel="' + therel + '"]').parent().children('.follow-link').fadeIn();
            }
        }
    });
});
4

2 に答える 2

3

共通の関数を 1 つ作成し、その関数でいくつかの単純化クリーンアップ作業を行います。

function followAjax(event, sel, phpurl) {
    event.preventDefault();
    var thisfollow = $(this);
    var therel = thisfollow.attr('rel');
    var followID = therel.replace(/[^0-9]/g, '');
    $.ajax({
        url: phpurl,
        type: 'POST',
        data: {followwho : followID},
        dataType: 'json',
        success: function(data){
            if (data.status) {
                $('a[rel="' + therel + '"]').hide().parent().children(sel).fadeIn();
            }
        }
    });
}

$(".unfollow-link").click(function(event) {
    followAjax.call(this, event, ".follow-link", '/ajax/unfollow.php')
});
$(".follow-link").click(function(event) {
    followAjax.call(this, event, ".unfollow-link", '/ajax/follow.php')
});
于 2012-05-29T22:46:28.300 に答える
0

両方のハンドラーで同じ関数を使用して、ルックアップthis.className(または jQuery: を使用$(this).hasClass) し、適切なアクションを実行できます。または、クロージャーで生成する 2 つの関数を使用します。

$(".follow-link").click(makeHandler("follow"));
$(".unfollow-link").click(makeHandler("unfollow"));

function makeHandler(action) {
    return function(event) {
        event.preventDefault();
        var therel = $(this).attr('rel');
        var followID = $(this).attr('rel').replace(/[^0-9]/g, '');
        var thisfollow = $(this);
        $.ajax({
            url: '/ajax/'+action+'.php',
            type: 'POST',
            data: {followwho : followID},
            dataType: 'json',
            success: function(data){
                // no need to ask for data.status
                $('a[rel="' + therel + '"]').hide();
                $('a[rel="' + therel + '"]').parent().children(action=="follow"
                    ? '.unfollow-link'
                    : '.follow-link'
                ).fadeIn();
            }
        });
    };
}
于 2012-05-29T22:51:02.953 に答える