帮助优化/重构代码
问题描述:
我具有以下的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
的ID是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)。
如果你这样做了codition语句将停留这样的:
if(($('#resetuserpassform_'+targetId).is(':visible'))
||
($('#account-home-container-'+targetId).is(':visible'))
||
($(targetTdDiv).html() =='')
){
/* AJAX call goes here */
}
此外,希望我错了,这是非常不可能的条件语句可以更加优化。得出这个结论的原因是你想要很多特殊性,而这很可能不可能以其他方式实现。
希望它可以帮助你。
哦!我怎么能忘记这一点,谢谢指出,代码已更改:-) – Kumar
我必须同意条件部分,它不能被进一步优化,条件是如果((链接A被点击并且链接B的窗体是可见的)或(链接B被点击并且链接A的形式可见)或(第三个条件)),但是谢谢:-) – Kumar