帮助优化/重构代码

时间:2011-08-18 15:43:53

标签: javascript jquery

我有以下jquery代码

$('a.editpo, a.resetpass').click(function(event){
    event.preventDefault();
    var urlToCall = $(this).attr('href');
    var hyperlinkid = '#'+$(this).attr('id');
    var targetId = $(this).attr('id').match(/\d+/);
    var targetTrDiv = '#poformloadertr_'+targetId;
    var targetTdDiv = '#poformloadertd_'+targetId;
    var currentLink = $(this).html();
    /*Todo: refactor or shorten the following statement*/
    if((currentLink=='Edit' && $('#resetuserpassform_'+targetId).is(':visible')) 
        ||
       (currentLink=='Reset Pass' && $('#account-home-container-'+targetId).is(':visible'))
        ||
       ($(targetTdDiv).html() =='')
    ){
        $.ajax({
            url:urlToCall,
            success: function(html){
                $(targetTdDiv).html(html);
                $(targetTrDiv).show();
            }
        });
    }else{
        $(targetTrDiv).hide();
        $(targetTdDiv).html('');
    }
});

editpo和resetpass是应用于表格列中超链接的类,即EditReset Pass,点击这些表格将表格加载到表格行中,相应tr的ID tdtargetTrDivtargetTdDiv。我不擅长JS和特别是jQuery,因此如果你觉得代码可以在某个步骤进行优化,请随意这样做。但我特别想减少条件声明。此外,如果我正确地写这个,请指出我。谢谢!

1 个答案:

答案 0 :(得分:1)

首先,您可以优化以下代码:

   var urlToCall = $(this).attr('href');
   var hyperlinkid = '#'+$(this).attr('id');
   var targetId = $(this).attr('id').match(/\d+/);
   var targetTrDiv = '#poformloadertr_'+targetId;
   var targetTdDiv = '#poformloadertd_'+targetId;
   var currentLink = $(this).html();

为:

   var wrappedSet$ = $(this);

   var urlToCall = wrappedSet$.attr('href');
   var hyperlinkid = '#'+wrappedSet$.attr('id');
   var targetId = wrappedSet$.attr('id').match(/\d+/);
   var targetTrDiv = '#poformloadertr_'+targetId;
   var targetTdDiv = '#poformloadertd_'+targetId;
   var currentLink = wrappedSet$.html();

编辑另外,您可以删除currentLink=='Edit' &&currentLink=='Reset Pass' &&代码段,因为您可以确定使用您所在的类选择器点击了正确的链接在jQuery点击处理程序中使用( a.editpo,a.resetpass )。

如果你这样做,那么编纂陈述将保持这样:

if(($('#resetuserpassform_'+targetId).is(':visible')) 
        ||
       ($('#account-home-container-'+targetId).is(':visible'))
        ||
       ($(targetTdDiv).html() =='')
    ){
       /* AJAX call goes here */
    }

此外,希望我错了,条件语句不太可能更加优化。结论这一点的原因是你想要以其他方式可能无法实现的更多特异性。

希望它对你有所帮助。