帮助优化/重构代码
我有以下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是应用于表格列中的超链接的类,即Edit
和Reset Pass
,单击这些表格在表格行中加载表格,相应的tr
和td
标识是targetTrDiv
和targetTdDiv
。 我不擅长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 */ }
此外,希望我错了,条件语句不太可能更加优化。 结论这一点的原因是,您希望以其他方式实现可能无法实现的更多特异性。
希望它能帮到你。