1.最近在写js代码完成一个前段DOM操作的函数时,自己错误的使用了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

,其实当时只是考虑到这个逻辑中有大概三四种不同的条件,要执行三四种运算,而且每次只能执行一种情况(执行完就到函数结尾),这些就是程序的执行流程。有了这个流程,自己开始考虑怎么把代码改改,改的一目了然,改的易于维护。这个时候自己自然而言的想到了"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;
}
};

最终代码变得简洁易于维护了,看着也赏心悦目了,嘎嘎.......

if...else..的错误用法的更多相关文章

  1. 避免常见的6种HTML5错误用法

    一.不要使用section作为div的替代品 人们在标签使用中最常见到的错误之一就是随意将HTML5的<section>等价于<div>——具体地说,就是直接用作替代品(用于样 ...

  2. 关于LayoutInflater的错误用法(警告提示:Avoid passing null as the view root)

    项目中用LayoutInflater加载xml布局一直飘黄警告,上网搜了搜发现没有解释明白的,到是找到了一篇外国的博文,但是竟然是英文...幸好以前上学时候的英语不是很差加上谷歌的辅助,简单翻一下!  ...

  3. 一直被用错的6种SQL 错误用法

    一直被用错的6种SQL 错误用法 1.LIMIT 语句 2.隐式转换 3.关联更新.删除 4.EXISTS语句 5.条件下推 6.提前缩小范围 sql语句的执行顺序: FROM ON JOIN WHE ...

  4. C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论

    今天做一个成绩管理系统的并发引擎,用Qt做的,仿照QtConcurrent搞了个模板基类.这里为了隐藏细节,隔离变化,把并发的东西全部包含在模板基类中.子类只需注册需要并发执行的入口函数即可在单独线程 ...

  5. 8种常见的SQL错误用法

    常见SQL错误用法 1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字 ...

  6. MySQL常见的8种SQL错误用法

    MySQL常见的8种SQL错误用法 前言 MySQL在2016年仍然保持强劲的数据库流行度增长趋势.越来越多的客户将自己的应用建立在MySQL数据库之上,甚至是从Oracle迁移到MySQL上来.但也 ...

  7. spring @Transactional的自调用失效问题与事务的典型错误用法剖析

    @Transactional的自调用失效问题 有时候配置了注解@Transactional,但是它会失效,这里要注意一些细节问题,以避免落入陷阱. 注解@Transaction的底层实现是Spring ...

  8. MySQL · 性能优化 · MySQL常见SQL错误用法(转自-阿里云云栖社区)

    作者:阿里云云栖社区链接:https://zhuanlan.zhihu.com/p/26043916来源:知乎著作权归作者所有,转载请联系作者获得授权. 前言 MySQL在2016年仍然保持强劲的数据 ...

  9. if else的错误用法!

    在学习C语言的时候,我们会了解和认识if  else 的用法, 并在程序里面使用它来作为判断条件! if(表达式)       //先定义一个条件,如果成立,则循环if里面的语句. { 语句 } el ...

  10. WebViewClient shouldOverrideUrlLoading 常见错误用法

    需求描述 在使用 WebView 的项目中,一个常见的需求是将页面内的链接跳转限制在 WebView 内,而不是使用外部浏览器打开,但 WebView 的默认行为是将链接点击事件作为 Intent 发 ...

随机推荐

  1. 沈逸老师ubuntu速学笔记(1)--安装flashplayer,配置中文输入法以及常用命令

    开篇首先感谢程序员在囧途(www.jtthink.com)以及沈逸老师,此主题笔记主要来源于沈老师课程.同时也感谢少年郎,秦少.花旦等同学分享大家的学习笔记. 1.安装flash player ctr ...

  2. JSON 日期格式问题 /Date(1325696521000)/

    json返回的日期格式/Date(1325696521000)/,怎么办? Controller返回的是JsonResult对象就会导致出现这样的格式: /Date(1325696521000)/ p ...

  3. mysqldump 失败

    背景交代 mysql版本:mysql Ver 14.14 Distrib 5.7.11, for Linux (x86_64) using EditLine wrapper os:Linux vers ...

  4. js常用代码收藏

    --1.遍历string分割为数组 <script language="javascript"> str="2,2,3,5,6,6"; //这是一字 ...

  5. [改善Java代码]多种最值算法,适时选择

    建议64:多种最值算法,适时选择. 对一批数据进行排序,然后找出其中的最大值或最小值,这是基本的数据结构知识.在Java中我们可以通过编写算法的方式,也可以通过数组先排序再取值的方式来实现.下面以求最 ...

  6. 【模拟】UVa 12108 - Extraordinarily Tired Students

    When a student is too tired, he can't help sleeping in class, even if his favorite teacher is right ...

  7. Windows 8.1 归档 —— Step 1 选择与安装

    下面是 Windows 8.1 各版本区别: Windows 8.1 标准版(一般就称之为Windows 8.1): 包括全新的 Windows 商店.Windows 资源管理器.任务管理器等等,还将 ...

  8. Redis 命令 - Pub/Sub

    PSUBSCRIBE pattern [pattern ...] Listen for messages published to channels matching the given patter ...

  9. JavaScript之模拟评星打分

    <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&qu ...

  10. 链接器工具错误 LNK2011

    问题描述: 使用visual studio 2015编译apr-iconv失败,提示"链接器工具错误 LNK2011:未链接预编译对象:映像可能不能运行"错误. 原因分析: MSD ...