我有以下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
的ID td
是targetTrDiv
和targetTdDiv
。我不擅长JS和特别是jQuery,因此如果你觉得代码可以在某个步骤进行优化,请随意这样做。但我特别想减少条件声明。此外,如果我正确地写这个,请指出我。谢谢!
答案 0 :(得分: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 )。
如果你这样做,那么编纂陈述将保持这样:
if(($('#resetuserpassform_'+targetId).is(':visible'))
||
($('#account-home-container-'+targetId).is(':visible'))
||
($(targetTdDiv).html() =='')
){
/* AJAX call goes here */
}
此外,希望我错了,条件语句不太可能更加优化。结论这一点的原因是你想要以其他方式可能无法实现的更多特异性。
希望它对你有所帮助。