2011-08-18 85 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