jQuery中的一些小技巧
发布时间 - 2026-01-10 22:37:11 点击率:次JQ使用过程中,一些小技巧:

1.is()方法
根据选择器、元素或 jQuery 对象来检测匹配元素集合,如果这些元素中至少有一个元素匹配给定的参数,则返回 true。一些小应用如下:
<ul> <li>list <strong>item 1</strong></li> <li><span>list item 2</span></li> <li>list item 3</li> </ul>
$("ul").click(function(event) {
var $target = $(event.target);
if ( $target.is("li") ) {
$target.css("background-color", "red");
}
});
如此,便可以限制住,只有列表项li本身点击之后,才会触发写入的点击事件.
其也可以做以下一些判断:
// 是不是一个div
elem.is('div') && console.log("it's a div");
// 是不是有包含(也可以有其他类名)bigbox的类名的元素?
elem.is('.bigbox') && console.log("it has the bigbox class!");
// 是不是隐藏的?
elem.is(':not(:visible)') && console.log("it is hidden!");
这里有一点需要注意,&&运算符可以用来做一个判断,当前面的条件满足时,后面的会执行,但是后面的条件不能是表达式,只能是console.log()或则++i一类的.
还有以下比较有用的用法:
elem.animate({'width':200},1000);
// 是否正在动画
elem.is(':animated') && console.log("it is animated!");
2.jquery中拓展方法
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效。
如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个jquery实例都可以引用这个方法了.
那么你可以这样子:$("#div").abc();
jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法。
jQuery.fn.extend(object);给jQuery对象添加方法。
jQuery.extend(object); 为jQuery类添加添加类方法,可以理解为添加静态方法。如:
elem.animate({'width':200},1000);
// 是否正在动画
elem.is(':animated') && console.log("it is animated!");
便为 jQuery 添加一个为add 的 “静态方法”,之后便可以在引入 jQuery 的地方,使用这个方法了,
$.add(3,4); //return 7
jQuery.fn.exists = function(){ return this.length > 0; }
console.log($('#elem').exists() ? "exists!" : "doesn't exist!");
3.jQuery方法$()实际上是拥有两个参数的
$('li','#firstList').each(function(){
console.log($(this).html());
});
这里,第二个参数用来限制第一个参数给定的查找结果
$('<div>',{
"class": "bigBlue",
"css": {
"background-color":"purple"
},
"width" : 20,
"height": 20,
"animate" : { // 可以设置div的动画效果
"width": 200,
"height":50
}
}).appendTo('#result');
这里,第二个参数用来对创建的元素进行设置.
4.jquery中的end()方法,可以让链式语法写起来更加高效,快捷.
<ul id="meals"> <li> <ul class="breakfast"> <li class="eggs">No</li> <li class="toast">No</li> <li class="juice">No</li> </ul> </li> </ul>
breakfast.find('.eggs').text('Yes').end() // back to breakfast
.find('.toast').text('Yes').end().find('.juice').toggleClass('juice coffee').text('Yes');
这里,end()会返回查找元素的上一级.
5.contextmenu事件 右键点击
也许希望web 应用感觉更像原生的,那么可以阻止contextmenu默认事件。
$(function(){
$(document).on("contextmenu",function(e){
e.preventDefault();
});
});
当然,应用此事件,也可以自定义,右键出来的操作菜单,类似于
6.有时候不希望网页的某一部分内容被选择比如复制粘贴这种事情,我们可以这么做:
$('p.descr').attr('unselectable', 'on').css('user-select', 'none').on('selectstart', false);
这样,内容就不能再被选择了.
7.最小的DOM操作
用js操作DOM是非常浪费资源的,下面的方法一般是我们通常的做法:
var elem = $('#elem');
for(var i = 0; i < 100; i++){
elem.append('<li>element '+i+'</li>');
}
这样做,重复的向元素中添加,无疑是一种极大的资源浪费,而通过下面的方法,则可以减少大量的DOM操作
var elem = $('#elem'),
arr = [];
for(var i = 0; i < 100; i++){
arr.push('<li>element '+i+'</li>');
}
elem.append(arr.join(''));
8.更方便的分解URL
我们一般可以使用正则表达式来分解URL,但是这并不是一个好方法,我们可以借助a标签来完成URL的分解
var url = 'http://tutorialzine.com/books/jquery-trickshots?trick=12&&abc=123#comments';
var a = $('<a>',{ href: url });
console.log(url);
console.log('Host name: ' + a.prop('hostname')); //Host name: tutorialzine.com
console.log('Path: ' + a.prop('pathname')); //Path: /books/jquery-trickshots
console.log('Query: ' + a.prop('search')); //Query: ?trick=12&&abc=123
console.log('Protocol: ' + a.prop('protocol')); //Protocol: http:
console.log('Hash: ' + a.prop('hash')); //Hash: #comments
这样我们就可以很快速的完成URL的分解
9.有时候,缓存selector,反而可以优化你的js
下面有三种情况,第一种情况是一部分人的通常做法,这种写法费力而且不讨好,后面两种方案则是对第一种的优化,可以二选一.
第一种:
$('#pancakes li').eq(0).remove();
$('#pancakes li').eq(1).remove();
$('#pancakes li').eq(2).remove();
第二种和第三种,可以二选一:
//第二种
var pancakes = $('#pancakes li');
pancakes.eq(0).remove();
pancakes.eq(1).remove();
pancakes.eq(2).remove();
//第三种
pancakes.eq(0).remove().end().eq(1).remove().end().eq(2).remove().end();
10.on()方法
on() 方法在被选元素及子元素上添加一个或多个事件处理程序。
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。该方法给 API 带来很多便利,推荐使用该方法,它简化了 jQuery 代码库。
注意:使用 on() 方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素)。
提示:如需移除事件处理程序,请使用 off() 方法。
提示:如需添加只运行一次的事件然后移除,请使用 one 方法。
$(selector).on(event,childSelector,data,function,map)
11.模拟触发事件
我们可以通过trigger模拟触发一个click事件
var press = $('#press');
press.on('click',function(e, how){
how = how || '';
alert('The buton was clicked ' + how + '!');
});
press.trigger('click');
press.trigger('click',['fast']);
同时,我们亦可以,使用on()方法创建自己喜欢的事件名称,然后通过trigger来触发。举例如下:
<button id="button1">Jump</button> <button id="button2">Punch</button> <button id="button3">Click</button> <button id="clear" style="float: right;">Clear</button> <div id="eventDiv"></div>
var button1 = $('#button1'),
button2 = $('#button2'),
button3 = $('#button3'),
clear = $('#clear'),
div = $('#eventDiv');
div.on({
jump : function(){
alert('Jumped!');
},
punch : function(e,data){
alert('Punched '+data+'!');
},
click : function(){
alert('Simulated click!');
}
});
button1.click(function(){
div.trigger('jump');
});
button2.click(function(){
// Pass data along with the event
div.trigger('punch',['hard']);
});
button3.click(function(){
div.trigger('click');
});
clear.click(function(){
//some clear code
});
12.触摸事件
// Define some variables
var ball = $('<div id="ball"></div>').appendTo('body'),
startPosition = {}, elementPosition = {};
// Listen for mouse and touch events
ball.on('mousedown touchstart',function(e){
e.preventDefault();
// Normalizing the touch event object
e = (e.originalEvent.touches) ? e.originalEvent.touches[0] : e;
// Recording current positions
startPosition = {x: e.pageX, y: e.pageY};
elementPosition = {x: ball.offset().left, y: ball.offset().top};
// These event listeners will be removed later
ball.on('mousemove.rem touchmove.rem',function(e){
e = (e.originalEvent.touches) ? e.originalEvent.touches[0] : e;
ball.css({
top:elementPosition.y + (e.pageY - startPosition.y),
left: elementPosition.x + (e.pageX - startPosition.x),
});
});
});
ball.on('mouseup touchend',function(){
// Removing the heavy *move listeners
ball.off('.rem');
});
13.更快的阻止默认事件
通常,我们用event.preventDefalut()来阻止默认事件,但是jquery为此提供了更简便的方法:
<a href="http://google.com/" id="goToGoogle">Go To Google</a>
$('#goToGoogle').click(false);
14.使用event.result链接多个事件处理程序。
对一个元素绑定多个事件处理程序并不常见,而使用event.result更可以将多个事件处理程序联系起来。看下面的例子。
var press = $('#press');
press.on('click',function(){
return 'Hip';
});
press.on('click',function(e){
console.log(e.result + ' Hop!');
})
//控制台输出: HipHop!
15.平行的运行多个Ajax请求
当我们需要发送多个Ajax请求是,相反于等待一个发送结束再发送下一个,我们可以平行地发送来加速Ajax请求发送。
$.when($.get('assets/misc/1.json'), $.get('assets/misc/2.json')).then(function(r1, r2){
console.log(r1[0].message + " " + r2[0].message);
})
16.通过jQuery获得ip
我们不仅可以在电脑上ping到一个网站的ip,也可以通过jQuery得到
$.get('https://jsonip.com/', function(res){ console.log(res.ip); });
17.使用最简单的ajax请求
jQuery(使用ajax)提供了一个速记的方法来快速下载内容并添加在一个元素中。
<p class="content"></p> <p class="content"></p>
var contentDivs = $('.content');
contentDivs.eq(0).load('1.txt');
contentDivs.eq(1).load('1.html #header');
18.通过IP地址获得地理位置
有很多在线服务可以告诉我们IP地址所在的城市和国家,下面我们先ping到百度的IP地址,然后获取其地理位置:
var ip = '119.75.218.70',
api = 'http://freegeoip.net/json/' + ip + '?callback=?';
$.getJSON(api, function(r){
console.log('How is the weather in ' + r.city + ', ' + r.country_name + '?');
});
19.使用匿名函数来产生一个独立的代码块
定义全局变量和函数是一种代码很粗糙的行为,更好的方式是通过使用匿名函数使你的代码独立于块之中。看下面的例子:
(function($){
var c = 1;
$.fn.count = function(){
log(c++);
return this;
};
})(jQuery);
$(document).count();
$('body').count().count();
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# jQuery
# 小技巧
# 15个jquery常用方法、小技巧分享
# jQuery提交多个表单的小技巧
# jquery操作复选框(checkbox)的12个小技巧总结
# Jquery下的26个实用小技巧(jQuery tips
# tricks & solutions)
# jQuery前端开发35个小技巧
# 七个不允许错过的jQuery小技巧
# WEB前端开发都应知道的jquery小技巧及jquery三个简写
# 几个比较经典常用的jQuery小技巧
# jQuery开发者都需要知道的5个小技巧
# 前端开发必知的15个jQuery小技巧
# 多个
# 我们可以
# 第一种
# 是一种
# 请使用
# 第二个
# 链式
# 如需
# 第二种
# 移除
# 第三种
# 你可以
# 第一个
# 有很多
# 就不
# 则是
# 才会
# 是指
# 两种
# 推荐使用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速生成可下载的建站源码工具?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel中的Facade(门面)到底是什么原理
Android Socket接口实现即时通讯实例代码
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Linux安全能力提升路径_长期防护思维说明【指导】
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
中山网站制作网页,中山新生登记系统登记流程?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel如何优化应用性能?(缓存和优化命令)
制作公司内部网站有哪些,内网如何建网站?
教学论文网站制作软件有哪些,写论文用什么软件
?
Bootstrap整体框架之JavaScript插件架构
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Python正则表达式进阶教程_复杂匹配与分组替换解析
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
Laravel如何与Pusher实现实时通信?(WebSocket示例)
免费视频制作网站,更新又快又好的免费电影网站?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
如何在七牛云存储上搭建网站并设置自定义域名?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
PythonWeb开发入门教程_Flask快速构建Web应用
JavaScript如何实现路由_前端路由原理是什么
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
Python3.6正式版新特性预览
如何在橙子建站上传落地页?操作指南详解
Laravel如何处理异常和错误?(Handler示例)
网站建设保证美观性,需要考虑的几点问题!
魔毅自助建站系统:模板定制与SEO优化一键生成指南
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
如何用免费手机建站系统零基础打造专业网站?
如何快速搭建高效服务器建站系统?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Python图片处理进阶教程_Pillow滤镜与图像增强
网站制作壁纸教程视频,电脑壁纸网站?
如何挑选高效建站主机与优质域名?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
微信小程序制作网站有哪些,微信小程序需要做网站吗?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
如何为不同团队 ID 动态生成多个独立按钮

