帮助优化/重构代码

我有以下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标识是targetTrDivtargetTdDiv 。 我不擅长JS和特别是jQuery,因此如果你觉得代码可以在某个步骤进行优化,请随意这样做。 但我特别感兴趣的是减少条件声明。 此外,如果我正确地写这个,请指出我。 谢谢!

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

  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 */ } 

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

希望它能帮到你。