jquery代码规范让代码越来越好看


Posted in Javascript onFebruary 03, 2017

最近学了jQuery,感觉这个jQuery是真的挺不错的,果然像他说的那样,少些多做!刚一入手感觉真是不错。但是写多了,就会发现这个代码一行居然能写那么长。而且可读性还不好。  有幸自己买了一本锋利的jQuery这本书。我就整理了下。到底在实际应用中怎么让自己的jQurey的代码看起来可读性强,而且还有美感。  我就用了了本书中的一个小例子。来教教大家代码应该怎么写菜好看!

废话不多说,想把这个demo代码奉上。各位爷!您瞧好啊~

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>菜单栏</title>
 <style>
 *{
  margin: 0;
  padding: 0;
 }
 .box{
  width: 400px;
  height: 280px;
  background-color: red;
  margin: 50px auto;
  border: 1px solid #000;
 }
 .box .menu{
  width: 100%;
  height: 100%;
  background-color: gold;
  list-style: none;
 }
 .box .menu>.level1{
  width: 100%;
  height: auto;
  line-height: 40px;
  list-style: none;
 }
 .box .menu>.level1>a.current{
  background-color: green;
  color: #0a0a0a;
  text-decoration: none;
 }
 .box .menu>.level1>a{
  display: inline-block;
  background-color: gray;
  width: 100%;
  text-align: center;
  text-decoration: none;
 }
 .box .menu>.level1>.level2{
  width: 100%;
  height: 160px;
  background-color: white;
  display: none;
  float: left;
 }
 .box .menu>.level1:nth-of-type(1)>.level2{
  display: block;
 }
 .box .menu>.level1>.level2 li{
  width: 100%;
  height: 40px;
  list-style: none;
  background-color: gainsboro;
  text-align: center;
 }
 </style>
 <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
 <script>
 $(function () {

  $(".level1>a").click(function () {
  $(this).addClass("current").next().show().parent().siblings().children("a").removeClass("current").next().hide();
  return false;
  });
 });
 </script>
</head>
<body>
<div class="box">
 <ul class="menu">
 <li class="level1">
  <a href="#one" class="current">衬衫</a>
  <ul class="level2">
  <li>短袖衬衫</li>
  <li>长袖衬衫</li>
  <li>短袖衬衫</li>
  <li>短袖衬衫</li>
  </ul>
 </li>
 <li class="level1">
  <a href="#one">卫衣</a>
  <ul class="level2">
  <li>开襟卫衣</li>
  <li>开襟卫衣</li>
  <li>开襟卫衣</li>
  <li>开襟卫衣</li>
  </ul>
 </li>
 <li class="level1">
  <a href="#one">裤子</a>
  <ul class="level2">
  <li>短袖衬衫</li>
  <li>裤子衬衫</li>
  <li>短袖衬衫</li>
  <li>裤子衬衫</li>
  </ul>
 </li>
 </ul>
</div>
</body>
</html>

童鞋们。请看这段代码

$(".level1>a").click(function () {
  $(this).addClass("current").next().show().parent().siblings().children("a").removeClass("current").next().hide();
  return false;
  });

请问你第一眼看着个你能一下子看明白是怎么回事吗?

哪怕是开发过几年的大神。也不能一眼就看出来这行代码要干啥。就是因为这行代码太长了。每读一次都要自讲前面的串联起来看。毫无美感,阅读性。

虽然jQuery做到了行为和内容的分离,但jQuery代码也应该拥有良好的层次结构机规范,这样才能进一步改善代码的可读性和可维护性。

所以代码应该写出这种样式

$(".level1>a").click(function () {
  $(this).addClass("current")
  .next().show()
  .parent().siblings().children("a").removeClass("current")
  .next().hide();
  return false;
  });

将每一次对象执行的动作分割成单独一行。这样可读性就大大提高了。

但也不要随意分割,随意分割那你还不如分割呢。所以总结了,以下三点

1.对于同一个对象不超过3个操作的,可以直接写成一行

  $(this).addClass("current").show();

2.对于同意对象的较多操作建议,每行写一个操作

$(this).addClass("current")
  .show()
  .fadeTo("mouseover")
  .fadeTo("fast",1)
  .unbind("click")
  .click(function(){
  //do something
  });

3.对于多个对象的少量操作,可以每一个对象写一行,如果涉及子元素,可以考虑适当的缩进,例如demo中的代码

$(this).addClass("current")
  .childer("li").show().end()
.siblings().removeClass()
  .children("a").hide();

还要强调一点,就是要为代码添加注释;

jQuery 以其强大的选择器著称,有时候很复杂的问题用一行选择器就可以轻松解决,但是很容易写出来下面的代码

$("#table>tbody>tr:has(td:has(:checkbox:enabled))").css("background","red"); 哈哈,你能一眼认出来我吗?

在编写一个优秀的选择器的时候,千万不要忘记给这一段代码加上注释,这很重要,无论是自己日后阅读还是与他人分享、合作开发,注释都能起到良好的效果

//注释:在一个id为table的表格的tbody中,如果每一行的一列中的checkbox没有被禁用,则把这行的背景设为红色
$("#table>tbody>tr:has(td:has(:checkbox:enabled))").css("background","red");

通过类似的有意义的注释,能够培养良好的编码习惯和风格,提高开发效率。

----------------------------------------------------------更新---------------------------------------------------------

(1)jQuery对象和DOM对象的相互转换

在jQuery对象和DOM对象相互转换之前,先约定好定义变量的风格,如果获取的对象是jQuery对象,那么在变量面前加上$

例如:

var $variable = jQuery对象

如果获取的DOM对象;

var varible = DOM对象;

以上是jQuery编写的规范。希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JQUERY CHECKBOX全选,取消全选,反选方法三
Aug 30 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
Dec 08 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
Aug 02 Javascript
12种不宜使用的Javascript语法整理
Nov 04 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
Mar 20 Javascript
如何编写高质量JS代码(续)
Feb 25 Javascript
jQuery validate插件功能与用法详解
Dec 15 Javascript
JS实现的新闻列表自动滚动效果示例
Jan 30 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
vue-router 2.0 跳转之router.push()用法说明
Aug 12 Javascript
Javascript for in的缺陷总结
Feb 03 #Javascript
canvas绘制七巧板
Feb 03 #Javascript
JS对象是否拥有某属性如何判断
Feb 03 #Javascript
jQuery实现的浮动层div浏览器居中显示效果
Feb 03 #Javascript
JavaScript中捕获与冒泡详解及实例
Feb 03 #Javascript
JS基于正则截取替换特定字符之间字符串操作示例
Feb 03 #Javascript
几种tab切换详解
Feb 03 #Javascript
You might like
PHP图片上传类带图片显示
2006/11/25 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
php实现websocket实时消息推送
2018/03/30 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
Prototype使用指南之form.js
2007/01/10 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
javascript异常处理实现原理详解
2020/02/17 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
会计电算化专业应届大学生求职信
2013/10/22 职场文书
外贸业务员岗位职责
2013/11/24 职场文书
公开服务承诺制度
2014/03/26 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
村主任当选感言
2015/08/01 职场文书
化验室安全管理制度
2015/08/06 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
SpringBoot 集成Redis 过程
2021/06/02 Redis