一些jquery的坑

iFat3 发布在JQuery2017年6月6日view:133前端开发BrettBatjQuery

在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

隐藏标注

1 乱用选择器

坑人指数:200

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

//错误的写法
$("#button").click(function(){
    $(‘#list li‘).addClass(‘strong‘);
    $(‘#list li‘).css(‘color‘, ‘red‘);
});
//正确的写法
$("#button").click(function(){
    $lis = $(‘#list li‘);
    $lis.addClass(‘strong‘);
    $lis.css(‘color‘, ‘red‘);
});
//更好的写法
$("#button").click(function(){
    $(‘#list li‘).addClass(‘strong‘).css(‘color‘, ‘red‘);
});

2 全局选择效率低

坑人指数:100

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

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

3 复制匿名函数

坑人指数:50

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

//错误的写法
$(‘#myDiv‘).click( function(){
   //一些操作
});
//正确的写法
function divClickFn(){
   //一些操作
}
$(‘#myDiv‘).click(function(){
    divClickFn();
});

4 误用ajax的complete

坑人指数:30

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

//错误的写法
$.ajax({
  url: "http://tools.42du.cn/jsonp/student/all",
}).complete(function( data ) {
    //一些操作
});
//正确的写法
$.ajax({
  url: "http://tools.42du.cn/jsonp/student/all",
}).success(function( data ) {
    //一些操作
});

5 链式调用的误用

坑人指数:20

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

//错误的写法
$("#myDiv").click(function(e) {
  $(this).fadeOut("slow").remove();
});
//正确的写法
$("myDiv").click(function(e){
  $(this).fadeOut("slow", function(){
    $(this).remove();
  });
});

6 事件多次绑定

坑人指数:20

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

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

7 错误使用this指示符

坑人指数:10

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

//错误的写法
$( "#myList").click( function() {
   $(this).method();
   $("#myList li").each( function() {
      //this并不指向myList
      $(this).method2();
   })
});
时间: 2024-11-04 21:37:57

一些jquery的坑的相关文章

在vue-cli中引入jquery的坑

第一步:在package.json里的dependencies加入"jquery" : "^2.2.3" 第二步:npm i 第三步:在webpack.base.conf.js里加入const webpack = require("webpack") 第四步:在module.exports的最后加入 plugins: [new webpack.optimize.CommonsChunkPlugin('common.js'),new webpack

jQuery入坑指南

前言 Ajax官方文档 爱jQuery jQuery插件库 jQuery中文api input 赋值和取值 记录一下: 在写一个input赋值,二话不说就直接利用了$('#xx').val()来进行取值和赋值,取值ok,赋值后利用alert显示正确,但是在html上并没有正确的显示出来. 后来改为使用如下代码就可以正确的在页面上显示了: $("#Slider6").attr("value", fromValue+";"+timeTo); 不要使用

js/jquery this 坑

重要:js onclick() 函数中,取不到this !!! 错误的写法: function test(){ $(this).parent().addClass('active') } 正确的写法是:函数定义时带参数,调用时传入this function test(param){ $(param).parent().addClass('active') } <button onclick="test(this)"> 原文地址:https://www.cnblogs.com

苹果手机 微信开发下jquery 的一些坑

最近做维系项目中遇到了一些jquery的坑: function GetRTime(){ var EndTime= new Date('<?php echo date('Y/m/d H:i:s',$output['bargain_info']['end_time']);?> '); var NowTime = new Date(); var t =EndTime.getTime() - NowTime.getTime(); var d=0; var h=0; var m=0; var s=0;

抛弃seajs,走向requirejs

[前言] 这篇文章是站在初学者的角度写的,大牛别碰,真实的个人想法,没有任何偏袒. [痛苦的seajs] 之前说过,半年之前想尝试seajs,一直各种原因没有用起来, 最近使用了一周,算是基本上入门了,刚开始感觉这种管理js的办法不错, 但是后来开始推广到项目上就痛苦了. [支持国产的心,无奈] 闲扯淡, 有一颗支持国产的心,之前考虑后台ui框架,第一选择是dwz, 我勒个去,使用苦不堪言,各种bug,各种文档不好, 最后改投easyui,强大的功能,健全的文档,健全的例子. [成功的框架] 在

jquery操作html data-* 属性的坑

jquery操作html data-* 属性的坑,布布扣,bubuko.com

jquery 的 each 方法中 return 的坑

jquery 的 each 方法中 return 的坑 Chapter 0 在项目中使用 jquery 的 each 方法时想在 each 的循环中返回一个布尔类型的值于是掉进一个坑中... Chapter 1 最初的代码: 这里的代码,虽然return 了,但是并未实际 return 值作为方法的返回值,而且还是继续往后执行. 在网上查询之后发现在 jquery 的 each 方法中如果 return true 相当于是 continue,而 return false 相当于是 break.

jQuery版本升级踩坑大全

背景 -------------------------------------------------------------------------------- jQuery想必各个web工程师都再熟悉不过了,不过现如今很多网站还采用了很古老的jQuery版本.其实如果早期版本使用不当,可能会有DOMXSS漏洞,非常建议升级到jQuery 1.9.x或以上版本.前段时间我就主导了这件事情,把公司里我们组负责的项目jQuery版本从1.4.2升级到了jQuery 1.11.3.jQuery官

记一次 jquery mobile被AJAX坑了。

简单情况是 MVC 重定向,URL不变 试了N种方式,跳来跳去,无解,服务端跳,写JS跳,生成跳转中间页跳.失败 后来一看,明明已经跳到新页了,样式什么还是原页的,有点火大了. 出去溜一圈,喝杯水,和同事东拉西扯一通. 回头一看,突然反应过来,这不是AJAX的效果么,坑我半个多小时. 为加验证,是手动调用的submit.没往AJAX上想. $("form").submit(); 但jquery mobile 内部会把submit也通过AJAX访问. 解决办法是禁用. 注意 绑定mobi