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. Android(java)学习笔记103:Map集合的获取功能

    package cn.itcast_01; import java.util.Collection; import java.util.HashMap; import java.util.Map; i ...

  2. openshift django目录结果

    blog├── README.md├── requirements.txt├── setup.py├── static├── wsgi│   ├── application│   ├── db.sql ...

  3. python(1) - 数据类型和变量

    数据类型: 整数:就是整数,包括正整数,0,负整数 浮点数: 通俗点说,就是小数 长整数: 就是比较长的整型,通常后面会跟一个L 字符串: 字符串需要用""或''括起来.单引号和双 ...

  4. [设计模式]<<设计模式之禅>>之关于单一职责原则

    单一职责原则的英文名称是Single Responsibility Principle,简称是SRP. 这个原则存在争议之处在哪里呢?就是对职责的定义,什么是类的职责,以及怎么划分类的职责.我们先举个 ...

  5. 【推公式】UVa 10995 - Educational Journey

    1A~,但后来看人家的代码好像又写臭了,T^T... Problem A: Educational journey The University of Calgary team qualified f ...

  6. 练习题之ExChange

    两个线程可以交换对象的同步点.每个线程都在进入exChange方法时给出某个对象,并接受其他线程返回时给出的对象.用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数 ...

  7. Tamperdata工具使用(登陆时就修改用户名),篡改post数据

    Tamperdata是firefox上的一款插件,它可以实现篡改数据的功能,这样可以做一些安全的测试验证,他的原理就是在发出请求前,在本地就开始改动数据,下面修改post请求 1.安装Tamperda ...

  8. Spring(3.2.3) - Beans(6): 作用域

    Spring 支持五种作用域,分别是 singleton.prototype.request.session 和 global session. 作用域 说明  singleton (默认作用域)单例 ...

  9. OpenXml Excel数据导入导出(含图片的导入导出)

    声明:里面的很多东西是基于前人的基础上实现的,具体是哪些人 俺忘了,我做了一些整合和加工 这个项目居于openxml做Excel的导入导出,可以用OpenXml读取Excel中的图片 和OpenXml ...

  10. Javascript中while和do-while循环用法详解

    while循环 while 语句与 if 语句相似,都有条件来控制语句(或语句块)的执行,其语言结构基本相同:while(conditions){    statements;} while 语句与 ...