1 乱用选择器

坑人指数:200

JQuery选择器调用代价很大,反复调用效率更低。应采用缓存对象的方法或采用链式调用的方式。

  1. //错误的写法
  2. $("#button").click(function(){
  3. $('#list li').addClass('strong');
  4. $('#list li').css('color', 'red');
  5. });
  6. //正确的写法
  7. $("#button").click(function(){
  8. $lis = $('#list li');
  9. $lis.addClass('strong');
  10. $lis.css('color', 'red');
  11. });
  12. //更好的写法
  13. $("#button").click(function(){
  14. $('#list li').addClass('strong').css('color', 'red');
  15. });

2 全局选择效率低

坑人指数:100

尽量使用上下文(context)查找,避免全局选择的使用。全局选择器会进行整个Doc的查找,效率很低。

  1. //错误的写法
  2. $(".active").method();
  3. //正确的写法
  4. var ul = $("#myList");
  5. $(".active",ul).method();

3 复制匿名函数

坑人指数:50

避免多次复制匿名函数的写法,将匿名函数分离出来,供其它对象多次调用。

  1. //错误的写法
  2. $('#myDiv').click( function(){
  3. //一些操作
  4. });
  5. //正确的写法
  6. function divClickFn(){
  7. //一些操作
  8. }
  9. $('#myDiv').click(function(){
  10. divClickFn();
  11. });

4 误用ajax的complete

坑人指数:30

当用ajax进行数据请求时,避免使用complete回调方法,而应该使用success方法。complete回调在请求成功或失败都会触发。

  1. //错误的写法
  2. $.ajax({
  3. url: "http://tools.42du.cn/jsonp/student/all",
  4. }).complete(function( data ) {
  5. //一些操作
  6. });
  7. //正确的写法
  8. $.ajax({
  9. url: "http://tools.42du.cn/jsonp/student/all",
  10. }).success(function( data ) {
  11. //一些操作
  12. });

5 链式调用的误用

坑人指数:20

采用链式调用的方式会使对象在渐变未完成之前就被移除,即remove方法会在fadeOut方法完成之前调用。当需要第一方法完成之后,再执行第二个方法,请使用回调,即第二种方式。

  1. //错误的写法
  2. $("#myDiv").click(function(e) {
  3. $(this).fadeOut("slow").remove();
  4. });
  5. //正确的写法
  6. $("myDiv").click(function(e){
  7. $(this).fadeOut("slow", function(){
  8. $(this).remove();
  9. });
  10. });

6 事件多次绑定

坑人指数:20

如果你绑定(bind)同一事件多次,响应就会被执行多次。为避免多次执行,请先做事件解绑再重新绑定。

  1. //避免响应多次执行
  2. $("myDiv").unbind("click").bind("click");

7 错误使用this指示符

坑人指数:10

this指示符存在于一定的上下文中的,当上下文变化时this指向不同的对象。如果还想调用原上下文中的this,则需要在原上下文中缓存原this对象($that = $(this))。

  1. //错误的写法
  2. $( "#myList").click( function() {
  3. $(this).method();
  4. $("#myList li").each( function() {
  5. //this并不指向myList
  6. $(this).method2();
  7. })
  8. });

JQuery坑,说说哪些大家都踩过的坑的更多相关文章

  1. js/jQuery使用过程中常见问题/已踩过的坑大杂烩

    目录 一.jQuery选择器选择选中的或者disabled的选择框时attr函数无效 二.jQuery each函数的break/continue 三.jQuery 获取元素的left会值/left数 ...

  2. 记jQuery.fn.show的一次踩坑和问题排查

    最近很少已经很少用jQuery,因为主攻移动端,常用Zepto,其实很多细节和jQuery并不一样.最近又无意中接触到了PC的需求和IE6, 使用了jQuery,刚好踩坑了,特意记录一下. 本文内容如 ...

  3. 论nw.js的坑~~~感觉我所有的前端能遇到的坑都踩了一遍

    先总结:nw.js 真特么的...难用...文档,我得先百度才能看的稍微明白点文档......!!!!!!我感觉我所有的前端能遇到的坑都踩了一遍,此文针对前后端分离项目,别的先不说 一.不需要在项目里 ...

  4. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  5. 那些移动端web踩过的坑

    原文链接:https://geniuspeng.github.io/2017/08/24/mobile-issues/ 扔了N久,还是捡回来了.好好弄一下吧.刚工作的时候挺忙的,后来不那么忙了,但是变 ...

  6. framework7 总结之前遇到的问题和踩过的坑

    官网上写的案例比较简单明了,我这里就将我使用时踩过的坑做一个总结,与大家共勉! 最近使用framework,基本全靠浏览官方文档,当然,有遇到了许多的错误,开始不知道哪里出问题也很着急,到最后发现问题 ...

  7. 项目中踩过的坑之-sessionStorage

    总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助. 项目情景: 有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面 ...

  8. "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"

    欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...

  9. 【转载】Fragment 全解析(1):那些年踩过的坑

    http://www.jianshu.com/p/d9143a92ad94 Fragment系列文章:1.Fragment全解析系列(一):那些年踩过的坑2.Fragment全解析系列(二):正确的使 ...

随机推荐

  1. .32-浅析webpack源码之doResolve事件流(4)

    流程图如下: 重回DescriptionFilePlugin 上一节最后进入relative事件流,注入地点如下: // relative plugins.push(new DescriptionFi ...

  2. iOS enum 定义与使用

    枚举其实很重要,特别是在应用开发初期,服务器端数据格式需要更改得情况下,枚举和宏都能是程序简洁,并且改动小. 网上有个人写的言简意赅,适合初学 转自:http://blog.csdn.net/ysy4 ...

  3. Thrift compiler代码生成类解析

    代码生成类解析: Thrift--facebook RPC框架,介绍就不说了,百度,google一大把,使用也不介绍,直接上结构和分析吧. Hello.thrift文件内容如下: namespace ...

  4. HEXO+Github,搭建属于自己的博客

    摘录自:http://www.jianshu.com/p/465830080ea9 1. github的准备 账号 密码 建立Repository建立与你用户名对应的仓库,仓库名必须为[your_us ...

  5. Java之IO流学习总结【下】

    2.字节流 |-- InputStream(读) |-- OutputStream(写) 由于字节是二进制数据,所以字节流可以操作任何类型的数据,值得注意的是字符流使用的是字符数组char[]而字节流 ...

  6. MyEclipse或Eclipse导出JavaDoc中文乱码问题解决

  7. Selenium滚动条window.scrollTo和window.scrollBy

    Selenium操作滚动条有两种方法,一种就是window.scrollTo,另一种是window.scrollBy,既然两个都可以用来操作滚动条,那这两个方法有什么区别呢? 1.window.scr ...

  8. junit源码解析总结

    前面的博客我们也已经整理到了,我们使用junit38,在写测试类的时候我们的测试类必须继承TestCase.这个所有测试类的父类在junit.framework包下面. 前面我们的整理都是说直接在ID ...

  9. java中可变长参数的定义及使用方法

    JAVA中可以为方法定义可变长参数( Varargs)来匹配不确定数量的多个参数,其定义用“...”表示.其实,这类似于为方法传了一个数组,且在使用方法上也和数组相同,如下: public void ...

  10. Unity 使用Plugins接入安卓SDK 基础篇

    一.须知 本帖适合对安卓一点基础都没有,有一定Unity基础.刚刚接完一个某文档很简单的渠道SDk,也当是自己总结一下. 二.Unity中的目录创建与理解. Plugins:插件目录,该目录再编译项目 ...