ホームページ >ウェブフロントエンド >jsチュートリアル >if...else. の間違った使い方
1. 最近、前の DOM を操作する関数を完成させるために JS コードを書いていたときに、誤って if..else.. コントロール本体を使用してしまいました。なぜ間違っているのでしょうか?私の
コードを見れば理解できるでしょう:
document.getElementsByClassName('eButton')[0].onclick=function(){ var checked=document.getElementsByClassName('checked'); var eButton=document.getElementsByClassName('eButton')[0]; if(checked.length==0){ alert('请选择要编辑的联系人!'); }else{ if(checked.length >2){ alert('每次编辑只能选择一条记录'); }else{ if(checked[0].childNodes[0].id=='check-all'){ var email=checked[1].parentNode.nextElementSibling.nextElementSibling.innerHTML; var name=checked[1].parentNode.nextElementSibling.innerHTML; document.getElementsByClassName('edit_contact_name')[0].value=name; document.getElementsByClassName('edit_contact_email')[0].value=email; var group=checked[1].parentNode.nextElementSibling.nextElementSibling.nextElementSibling if(group.innerHTML !="default"){ var group_id=group.getAttribute('group_id') document.getElementsByClassName('edit_contact_group_name')[0].value=id; } $('#edit_contact').modal(); }else{ if(checked.length ==2){ alert('每次编辑只能选择一条记录'); }else{ var email=checked[0].parentNode.nextElementSibling.nextElementSibling.innerHTML; var name=checked[0].parentNode.nextElementSibling.innerHTML; document.getElementsByClassName('edit_contact_name')[0].value=name; document.getElementsByClassName('edit_contact_email')[0].value=email; var group=checked[0].parentNode.nextElementSibling.nextElementSibling.nextElementSibling if(group.innerHTML !="default"){ var group_id=group.getAttribute('group_id') document.getElementsByClassName('edit_contact_group_name')[0].value=id; } $('#edit_contact').modal(); } } } } };
はは、私が書いたコードを見て、この関数は非常に強力であるに違いないと突然感じました。 if..else.. によって関数全体が台無しになってしまい、なぜ if..else を使用するのか考え始めました
実際、このロジックには 3 つまたは 4 つの異なる条件があると考えました。 3 つまたは 4 つの操作を実行する必要があり、一度に実行できるシチュエーションは 1 つだけです (実行後に関数の最後に移動します)。これらがプログラムの実行フローです。このプロセスを導入した後、コードを一目でわかりやすく、保守しやすいように変更する方法を考え始めました。このとき、自然に「return」というキーワードを思い浮かべました。「return」を使用すると、次のコードが得られました。
document.getElementsByClassName('eButton')[0].onclick=function(){ var checked=document.getElementsByClassName('checked'); var eButton=document.getElementsByClassName('eButton')[0]; if(checked.length==0){ alert('请选择要编辑的联系人!'); return; } if(checked.length ==1){ var email=checked[0].parentNode.nextElementSibling.nextElementSibling.innerHTML; var name=checked[0].parentNode.nextElementSibling.innerHTML; document.getElementsByClassName('edit_contact_name')[0].value=name; document.getElementsByClassName('edit_contact_email')[0].value=email; var group=checked[0].parentNode.nextElementSibling.nextElementSibling.nextElementSibling if(group.innerHTML !="default"){ var group_id=group.getAttribute('group_id') document.getElementsByClassName('edit_contact_group_name')[0].value=id; } $('#edit_contact').modal(); return; } if(checked.length ==2){ if(checked[0].childNodes[0].id=='check-all'){ var email=checked[1].parentNode.nextElementSibling.nextElementSibling.innerHTML; var name=checked[1].parentNode.nextElementSibling.innerHTML; document.getElementsByClassName('edit_contact_name')[0].value=name; document.getElementsByClassName('edit_contact_email')[0].value=email; var group=checked[1].parentNode.nextElementSibling.nextElementSibling.nextElementSibling if(group.innerHTML !="default"){ var group_id=group.getAttribute('group_id') document.getElementsByClassName('edit_contact_group_name')[0].value=id; } $('#edit_contact').modal(); return; } alert('每次编辑只能选择一条记录'); return; } if(checked.length >2){ alert('每次编辑只能选择一条记录'); } };
次の条件をリストすると、コードはより明確になります:
1.checked.length = =0
2.checked.length ==1
3.checked.length ==2
4.checked.length > 2
次に、繰り返されたコードを関数にカプセル化し(重複を削除)、取得しますコード:
function get_edit_modal_content(node_num,checked){ var email=checked[node_num].parentNode.nextElementSibling.nextElementSibling.innerHTML; var name=checked[node_num].parentNode.nextElementSibling.innerHTML; var contact_id=checked[node_num].parentNode.nextElementSibling.getAttribute('contact_id') var regular_name=/[\u4E00-\u9FA5\uF900-\uFA2D\w]*/; name=regular_name.exec(name)[0]; document.getElementsByClassName('edit_contact_id')[0].value=contact_id; document.getElementsByClassName('edit_contact_name')[0].value=name; document.getElementsByClassName('edit_contact_email')[0].value=email; var group=checked[node_num].parentNode.nextElementSibling.nextElementSibling.nextElementSibling if(group.innerHTML !="default"){ var group_id=group.getAttribute('group_id') document.getElementsByClassName('edit_contact_group_name')[0].value=group_id; } } document.getElementsByClassName('eButton')[0].onclick=function(){ var checked=document.getElementsByClassName('checked'); if(checked.length==0){ alert('请选择要编辑的联系人!'); return; } if(checked.length==1){ get_edit_modal_content(0,checked); $('#edit_contact').modal(); return; } if(checked.length==2){ if(checked[0].childNodes[0].id=='check-all'){ get_edit_modal_content(1,checked); $('#edit_contact').modal(); return; } alert('每次编辑只能选择一条记录'); return; } if(checked.length >2){ alert('每次编辑只能选择一条记录'); return; } };