2011-08-18 69 views
1

我具有以下的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的列中,点击这些负载了形式表中的行,各个trtd的ID是targetTrDivtargetTdDiv。我不擅长JS和特别的jQuery,因此如果您觉得可以在某个步骤优化代码,请随时这样做。但我特别想减少条件声明。此外,请指出我是否正确写这篇文章。谢谢!

回答

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

如果你这样做了codition语句将停留这样的:

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

此外,希望我错了,这是非常不可能的条件语句可以更加优化。得出这个结论的原因是你想要很多特殊性,而这很可能不可能以其他方式实现。

希望它可以帮助你。

+0

哦!我怎么能忘记这一点,谢谢指出,代码已更改:-) – Kumar

+0

我必须同意条件部分,它不能被进一步优化,条件是如果((链接A被点击并且链接B的窗体是可见的)或(链接B被点击并且链接A的形式可见)或(第三个条件)),但是谢谢:-) – Kumar