了解jQuery技巧来提高你的代码

jquery-技巧-教程

      jQuery之所以如此流行并被从大公司到个人博客的几乎每个人都广泛使用,是因为它上手和使用相当简单,而且为我们提供了一些人都不知道的相当棒的特性。我认为jQuery的大多数用户更趋向于使用jQuery插件来解决面临的难题,这通常是明智的选择。但是当插件相对于你的需求有一定缺陷的时候,你也许更应该想办法自己来解决,下面来看看这些实用的jQuery技巧,他们肯定会能够派上用场的! 

您还可以参考以下JavaScript相关教程及资源:
《10种JavaScript特效实例让你的网站更吸引人》
《300+Jquery, CSS, MooTools 和 JS的导航菜单资源》
《推荐9款很棒的网页绘制图表JavaScript框架脚本》

1.测试并提升你的jQuery选择器水平

      这个jQuery选择器实验室非常酷,它能在线免费使用,当然你也能下来到本地离线使用。这个测试页面包含复杂的HTML组合字段,然后你能尝试预定义使用各种jQuery选择器。如果这还不够你也可以自定义选择器。
jquery-选择器-技巧 

2.测试jQuery包装集是否包含某些元素

      如果你想测试一下某个jQuery包装集中是否包含某些元素,你首先可以尝试使用验证首个元素是否存在:

if($(selector)[0]){...} 
// 或者这样 
if($(selector).length){...}

来看看这个例子:

<ul id="shopping_cart_items"> <li> <input class="in_stock" name="item" type="radio" value="Item-X" />Item X </li> <li> <input class="unknown" name="item" type="radio" value="Item-Y" />Item Y </li> <li> <input class="in_stock" name="item" type="radio" value="Item-Z" />Item Z </li> 
</ul>

      如果你的页面中有以上 HTML 代码,则下面这个 if 条件将返回 true,因为有两个 input 域匹配了选择器,所以 <statument> 代码将会被执行

if($('#shopping_cart_items input.in_stock')[0]){<statement>
}

3.从jquery.org读取jQuery最新版本

你可以使用这句代码读取jQuery的最新版本的代码文件。

<script src="http://code.jquery.com/jquery-latest.js"></script>

当然,你还可以使用下面这个代码从ajax.googleapis.com调用同样的最新版本jQuery:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>

4.存储数据

      使用data方法可以避免在DOM中存储数据,有些前端开发者喜欢使用HTML的属性来存储数据:

$('selector').attr('alt', 'data being stored'); 
//之后可以这样读取数据: 
$('selector').attr('alt');

使用”alt”属性来作为参数名存储数据其实对于HTML来说是不符合语义的,我们可以使用jQuery的data方法来为页面中的某个元素存储数据:

$('selector').data('参数名', '要存储的数据'); 
//之后这样取得数据: 
$('selector').data('参数');

      这个data方法能让你自己明明数据的参数,更语义更灵活,你可以在页面上的任何元素存储数据信息。如果想了解更多关于data()和removeData()方法的介绍,可以看看jQuery官方讲解

      这个方法的经典应用是给input域一个默认值,然后在聚焦的时候清空它:
HTML部分:

<form id="testform"> <input type="text" class="clear" value="Always cleared" /> <input type="text" class="clear once" value="Cleared only once" /> <input type="text" value="Normal text" /> 
</form>

JavaSript部分:

$( function() { // 取出有clear类的input域 // (注: "clear once" 是两个class: clear 和 once) $('#testform input.clear').each( function() { // 使用data方法存储数据 $(this).data("txt", $.trim($(this).val())); }).focus( function() { // 获得焦点时判断域内的值是否和默认值相同,如果相同则清空 if ($.trim($(this).val()) === $(this).data("txt")) { $(this).val(""); } }).blur( function() { // 为有class clear的域添加blur时间来恢复默认值 // 但如果class是once则忽略 if ($.trim($(this).val()) === "" && !$(this).hasClass("once")) { // Restore saved data $(this).val($(this).data("txt")); } }); 
});

查看Demo

5.jQuery手册常备身边

      大多数人都很难记住所有的编程细节,即使再好的程序员也会有对某个程序语言的疏忽大意,所以把相关的手册打印出来或随时放在桌面上进行查阅绝对是可以提高编程效率的。
oscarotero jquery 1.3 (壁纸版)
jQuery手册

6.在FireBug控制台记录jQuery

      FireBug是我最喜欢用的一个浏览器扩展工具之一,这个工具可以让你快速的在可视化界面中了解当前页面的 HTML+CSS+JavaScript,并在该工具下完成即时开发。作为 jQuery 或 JavaScript 开发人员,FireFox对于记录你的JavaScript代码也得到支持。

      写入FireBug控制台的最简单方式如下:

console.log("hello world")

firebug-jquery-控制台

      你也可以按照你希望的方式写一些参数:

console.log(2,4,6,8,"foo",bar)

你也可以编写一个小扩展来记录jQuery对象到控制台:

jQuery.fn.log = function(msg) { console.log("%s: %o", msg, this); return this; 
}; // 对于这个扩展,你可以直接使用.log()方法来记录当前对象到控制台。 
$('#some_div').find('li.source > input:checkbox').log("sources to uncheck").removeAttr("checked");

7.尽可能使用ID选择器

      在使用jQuery之后,你会发现利用class属性来选择DOM元素变得相当简单。尽管如此,还是推荐大家尽量少用class选择器取而代之尽量多使用运行更快的ID选择器(IE浏览器下使用class选择器会在遍历整个DOM树之后返回相符的class包装集)。而ID选择器更快是因为 DOM本身就有”天然的”getElementById这个方法,而class并没有。所以如果使用class选择器的话,浏览器会遍历整个DOM,如果你的网页DOM结构足够复杂,这些class选择器足矣把页面拖得越来越慢。让我们看看这段简单的HTML代码:

<div id="main"> <form method="post" action="/"> <h2> Selectors in jQuery </h2> ... ... <input class="button" id="main_button" type="submit" value="Submit" /> </form> 
</div>
//使用class来调用submit按钮要比使用绝对的ID选择器慢很多 
var main_button = $('#main .button'); 
var main_button = $('#main_button');

8.善于利用jQuery链

      jQuery链不但允许以简洁的方式写出强大的操作,而且提高了开发效率,因为它能够把多个命令应用到包装集,而不必重新计算包装集。从而你不用再这样写了:

<li>Description: <input type="text" name="description" value="" /></li>
$('#shopping_cart_items input.text').css('border', '3px dashed yellow'); 
$('#shopping_cart_items input.text').css('background-color', 'red'); 
$('#shopping_cart_items input.text').val("text updated");

取而代之你可以使用jQuery链来完成简便的操作:

// same with chaining: 
var input_text = $('#shopping_cart_items input.text'); 
input_text.css('border', '3px dashed yellow').css('background-color', 'red').val("text updated");

9.绑定jQuery函数到$(window).load事件

      大多数jQuery实例或教程都告诉我们绑定我们的jQuery代码到$(document).ready事件。虽然$(document).ready事件在大多数情况下都OK,但是它的解析顺序是在文档准备就绪,单文档中的图片等对象正在下载的时候开始运行的。所以在某些时候使用$(document).ready事件并不一定能达到我们预期的效果,比如一些视觉效果和动画、拖拽、预读取隐藏图片等…通过使用$(window).load事件便可以安全的在整个文档都准备就绪之后再开始运行你期望的代码。

$(window).load( function() { // 将你希望在页面完全就绪之后运行的代码放在这里 
});

10.使用jQuery链来限定选择器,让你的代码更简洁更优雅

      由于JavaScript支持链结构而且支持断行,所以你的代码可以写成下面这样,这个例子先在元素上移除一个class然后在同一个元素上添加另一个class:

$('#shopping_cart_items input.in_stock').removeClass('in_stock').addClass('3-5_days');

11.使用回调函数同步效果

      如果你想确保某个事件或动画效果要在另一个事件运行之后再调用,那你就要使用回调函数了。你可以在这些动画效果后面绑定回调函数:slideDown( speed, [回调] ) ie. $(‘#sliding’).slideDown(’slow’, function(){… 点击这里预览这个例子.

<style> 
div.button { background: #cfd; margin: 3px; width: 50px; text-align: center; float: left; cursor: pointer; border: 2px outset black; font-weight: bolder; 
} #sliding { display: none; 
} 
</style>
$(document).ready( function() { // 使用jQuery的click事件改变视觉效果,并开启滑动效果 $("div.button").click( function() { // div.button 现在看上去是按下的效果 $(this).css( { borderStyle : "inset", cursor : "wait" }); // #sliding 现在将渐隐并在完成动作之后开启渐显效果 // slideup once it completes $('#sliding').slideDown('slow', function() { $('#sliding').slideUp('slow', function() { // 渐显效果完成后将会改变按钮的CSS属性 $('div.button').css( { borderStyle : "outset", cursor : "auto" }); }); }); }); 
});

12.学会使用自定义选择器

      jQuery允许我们在css选择器的基础上定义自定义选择器来让我们的代码更简洁:

$.expr[':'].mycustomselector= function(element, index, meta, stack){ // element- DOM元素 // index - 堆栈中当前遍历的索引值 // meta - 关于你的选择器的数据元 // stack - 用于遍历所有元素的堆栈 // 包含当前元素则返回true // 不包含当前元素则返回false 
}; // 自定义选择器的应用: 
$('.someClasses:test').doSomething(); //下面让我们来看看一个小例子,我们通过使用自定义选择器来锁定含有”rel”属性的元素集: 
$.expr[':'].withRel = function(element){ var $this = $(element); // 仅返回rel属性不为空的元素 return ($this.attr('rel') != ''); 
}; $(document).ready(function(){ // 自定义选择器的使用很简单,它和其他选择器一样,返回一个元素包装集 // 你可以为他使用格式方法,比如下面这样修改它的css样式 $('a:withRel').css('background-color', 'green'); 
});
<ul> <li> <a href="#">without rel</a> </li> <li> <a rel="somerel" href="#">with rel</a> </li> <li> <a rel="" href="#">without rel</a> </li> <li> <a rel="nofollow" href="#">a link with rel</a> </li> 
</ul>

13.预加载图片

      通常使用JavaScript来预加载图片是个相当不错的方法:

//定义预加载图片列表的函数(有参数) 
jQuery.preloadImages = function() { // 遍历图片 for ( var i = 0; i < arguments.length; i++) { jQuery("<img>").attr("src", arguments[i]); } 
} 
// 你可以这样使用预加载函数 
$.preloadImages("images/logo.png", "images/logo-face.png", "images/mission.png");

14.将你的代码测试完好

      jQuery有一个名为QUnit单元测试框架。编写测试很容易,它能让您可以放心地修改您的代码,并确保它仍然按预期工作。下面是如何工作的:

//将测试分成若干模块. 
module("Module B"); 
test("some other test", function() { // 指定多少个判断语句需要加入测试中. expect(2); equals(true, false, "failing test"); equals(true, true, "passing test"); 
});

 

英文原文:More jQuery and General Javascript Tips to Improve Your Code
翻译原文:http://blog.bingo929.com/jquery-javascript-tips-to-improve-code.html

转载于:https://www.cnblogs.com/hemingwang0902/archive/2010/01/07/1640966.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何主动清空.NET数据库连接池?

一般我们的项目中会使用1到2个数据库连接配置&#xff0c;同程艺龙的数据库连接配置被收拢到统一的配置中心&#xff0c;由DBA统一维护&#xff0c;业务方通过某个配置字符串拿到的是开箱即用的Connection对象。DBA能在对业务方无侵入的情况下&#xff0c;给业务方切换备份数据…

假如有人在今天炸了支付宝的存储服务器...

全世界只有3.14 % 的人关注了青少年数学之旅今天在知乎看到了一个问题《假如有人把支付宝存储服务器炸了&#xff08;物理炸&#xff09;&#xff0c;大众在支付宝里的钱是不是就都没有了呢&#xff1f;》外行人问题。网站都是有服务器的&#xff0c;服务器都是有实体的。那么支…

Cookie全解

1. Cookie 可以存储哪些值 在 Cookie 中只能存储个人可识别信息. 个人可识别信息是指可以用来识别或联系用户的信息. 例如用户的姓名, 电子邮件, 家庭住址等. 必须强调的是, 这些可识别信息必须是非机密或重要信息. 2. 使用 Cookie 对象保存和读取客户端信息. 要存储一个 Cooki…

代码格式

2019独角兽企业重金招聘Python工程师标准>>> 1.参考&#xff1a;JavaScript程序编码规范 转载于:https://my.oschina.net/u/1791074/blog/283578

94年出生,6篇SCI,一作发Science,你还不放下手上玩的泥巴

全世界只有3.14 % 的人关注了 青少年数学之旅 2019年9月27日&#xff0c;国际顶尖期刊《科学》&#xff08;Science&#xff09;杂志在线以全文Article的形式发表了北京航空航天大学材料科学与工程学院赵立东教授课题组在热电材料研究上取得的新进展&#xff0c;北京航空航天大…

一个问题让我直接闭门思过!!!拼多多面试必问项之List实现类:LinkedList

一、LinkedList概述 1、对于频繁的插入或删除元素的操作&#xff0c;建议使用LinkedList类&#xff0c;效率较高。 2、LinkedList是一个实现了List接口和Deque接口的双端链表。 3、LinkedList底层的链表结构使它支持高效的插入和删除操作&#xff0c;另外它实现了Deque接口&a…

Docker小白到实战之开篇概述

前言“不对啊&#xff0c;在我这运行很正常啊”&#xff0c;这句话小伙伴们在前几年应该听得很多&#xff1b;每次一到安装、部署时总有一堆问题&#xff0c;毕竟操作系统版本、软件环境、硬件资源、网络等因素在作怪&#xff0c;此时难免会导致开发小伙伴和运维哥们互相甩锅&a…

设置su为不需要密码切换为root

设置su为不需要密码 如果需要对某用户su命令也不需要输入密码&#xff0c;则需要修改下列的&#xff1a;1--->如果没有wheel组 则用sudo groupadd wheel创建命令为 sudo groupadd wheel&#xff1b;2---->sudo vim /etc/group将username和root加入到wheel用户组内 如图&a…

被女朋友拉黑后,我写了个“舔狗”必备神器

全世界只有3.14 % 的人关注了 青少年数学之旅 “ 在一个阳光明媚的清晨&#xff0c;我打开窗户呼吸了一口新鲜空气。阳光灿烂&#xff0c;岁月静好&#xff0c;又是一个约女朋友出去爬山吃饭看电影的好日子。 图片来自包图网 想到女朋友的大眼睛&#xff0c;我脸上不禁洋溢起了…

涨薪关键之反射机制,引得项目经理对你的看重,加薪触手可及!!!!

前言 就比如我前几天被面试官问什么是反射&#xff1f;&#xff1f;&#xff1f; 而我的回答是&#xff01;&#xff01;&#xff01; 反射是动态语言的关键&#xff0c;反射允许程序在执行期间借助Reflection API取得任何类的内部信息&#xff0c;并能直接操作任曦对象的内…

如何摆脱「自我否定」状态

大家好&#xff0c;我是Z哥。你最近正处于自我否定的状态吗&#xff1f;如果不是的话&#xff0c;回想一下最近的一次处于这种状态是什么时候&#xff1f;当时的感受如何&#xff1f;以及&#xff0c;最终是如何走出这个状态的&#xff1f;不着急&#xff0c;给你 1 分钟回忆一…

struct and union

[url]http://hi.baidu.com/tweigh/blog/item/5303d2ef6e2720eace1b3e9d.html[/url]1. struct的巨大作用面对一个人的大型C/C程序时&#xff0c;只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C程序&#xff0c;势必要 涉及一些(甚至大量)进…

编码GBK的不可映射字符

为什么80%的码农都做不了架构师&#xff1f;>>> 由于JDK是国际版的&#xff0c;在编译的时候&#xff0c;如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式&#xff0c; 则javac.exe首先获得我们操作系统默认采用的编码格式&#xff0c; 也即在编译java…

低调的大神!他改变了半导体产业!史上唯一两次获得诺贝尔物理奖,却几乎被人遗忘...

全世界只有3.14 % 的人关注了青少年数学之旅两次获得诺贝尔奖的科学家&#xff0c;世界上仅有这四个人&#xff01;他们是&#xff1a;1. 居里夫人(Marie Curie,1867~1934),波兰科学家,他的丈夫叫皮埃尔居里,两人合称“居里夫妇”! 1903年,居里夫妇和亨利...2.约翰巴丁 美国物理…

入职第一天,我接手了号称【屎山】的祖传代码,这还能卷吗???

公司各种各样的祖传代码都是令新人虎躯一震的代码&#xff0c;因为有时候你根本不知道它是干嘛的&#xff0c;甚至觉得它毫无用处&#xff0c;关键是 还绝对不能动&#xff0c;碰一段改半年&#xff0c;别问我怎么知道的。最讽刺的是&#xff0c;你可能为了修改代码&#xff0c…

设计模式之迭代器

迭代器模式介绍集合的结构迭代器模式是一种行为设计模式&#xff0c;让你能在不暴露集合底层表现形式(列表、栈、树等)的情况下遍历集合中所有的元素。迭代器模式满足了单一职责和开闭原则&#xff0c;外界的调用方也不需要知道任何一个不同的数据结构在使用上的遍历差异。迭代…

倒啤酒竟能拿到诺贝尔物理学大奖!明明是普通操作,凭什么这么强?

全世界只有3.14 % 的人关注了青少年数学之旅倒啤酒&#xff0c;是艺术&#xff0c;更是一门学问。每个初来社会报道的男孩&#xff0c;都必须掌握这个酷炫技能。它是从古自今的文化传承&#xff0c;也是一个男人成熟的标志。向快手老铁致敬然而&#xff0c;理想很丰满&#xff…

铁山靠之——HarmonyOS基础 - 1.0

HarmonyOS学习第一章 一、HarmonyOS简介1.1 安装和使用DevEco Studio1.2 环境配置1.3 项目创建1.4 运行程序1.5 基本工程目录1.5.1 工程级目录1.5.2 模块级目录1.5.3 app.json51.5.4 module.json51.5.5 main_pages.json 二、TypeScript快速入门2.1 简介2.2 基础类型2.2.1 布尔值…

vb.net2.0 Hmac-md5加密算法

2019独角兽企业重金招聘Python工程师标准>>> <summary> Hmac-md5加密算法。 </summary> <param name"APassWord">加密串(即密码)</param> <param name"ASourceStr">原始字符串</param> <returns>&l…

解决VS2010 beta2 安装后html标签和script智能提示不起作用的问题

此文已经移至&#xff1a;解决VS2010 beta2 安装后html标签和script智能提示不起作用的问题 安装VS2010 beta2 后&#xff0c;发现正常的html标签的智能提示不起作用&#xff0c;比如<a>,<p>&#xff0c;还有在<script>里面也没有了js的智能提示。 解决办法…