- 浏览: 887377 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
jQuery并不像他表面显示的那样,只有那些额定的方法供我们使用。其他在他库的代码内有着很多很酷很便捷的潜在方法,等待被我们发现。在本文中,我将带领你去领略一些我在jQuery库中发现的那些不怎么常见的方法。
1.理解jQuery方法:
当你调用jQuery方法时会发生什么呢?看看jQuery的方法体,非常地简单。
1 2 3 4 |
jQuery = function (selector, context) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init(selector, context); }; |
在表层的代码之下,jQuery方法(通常称之为“包装”方法)将返回一个实例化后的jQuery对象,即’jQuery.fn.init’构造函数的一个实例。
理解了这一点非常有用,当我们每次调用jQuery方法时,都会返回一个带有一组属性的完全独立的对象。而jQuery的聪明之处在于返回的这个对象是以数组的方式返回的。该对象中的所有元素(通称”集合“)都是由一个数字索引所指向,就像数组中的下标一样。而且jQuery还返回了一个对象的length属性,就像数组中的长度一样。这种思想给jQuery方法提供了无限的想象空间。比如,我们可以从’Array.prototype’中借用一些功能性方法。jQuery中的slice方法就是一个典型的例子:
1 2 3 4 5 6 7 8 9 10 |
/* ... jQuery.fn.extend({ ... */ slice: function() { return this.pushStack( Array.prototype.slice.apply( this, arguments ), "slice", Array.prototype.slice.call(<wbr>arguments).join(",") ); }, /* ... */ </wbr> |
在该slice方法不管this是否是一个真实的数组,它和其他的元素会和睦地相处,因为有着”length“这么一个属性。
jQuery中还有一些其他有趣的属性,比如”selector”—选择器,”context”—-上下文等。大部分的时候,只需给jQuery方法传递对象参数即可:
1 2 |
var jqObject = jQuery('a'); jqObject.selector; // => "a" |
一个重要的提示是,jQuery有时会返回一个全新的对象供你使用。比如你试图通过执行一段代码来改变一个集合,如”parent()”方法,但是此时jQuery将不会修改当前的对象,它会返回给你一个全新的对象。
1 2 3 4 |
var originalObject = jQuery('a'); var anotherObject = originalObject.parents(); originalObject === anotherObject; // => false |
所有试图改变集合的方法都会返回一个新的jQuery对象,你可以通过”.end()”方法或”.prevObject”属性来访问之前的那个对象。
2.面包、奶油元素的建立:
jQuery创建DOM的能力,是其核心功能之一。jQuery1.4新版本带来了一个全新的便捷地创建DOM对象的方法,如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
var myDiv = jQuery('<div />', { id: 'my-new-element', class: 'foo', css: { color: 'red', backgrondColor: '#FFF', border: '1px solid #CCC' }, click: function() { alert('Clicked!'); }, html: jQuery('<a />', { href: '#', click: function() { // do something return false; } }) }); |
在1.4版本中,当你创建一个元素对象时,可以再传入第二参数,该第二参宿可以作为该元素对象的属性设置,也可以理解会调用了.attr()方法。当然,jQuery会自行匹配传入的参数们,如’click’对应了jQuery库中的.click方法,以及’css’、’html’分别对应了jQuery库中的.css()、.html()方法,等等…
3.序列化表单中的input元素:
jQuery提供了一个方法可以将1个或多个表单中的所有input元素进行序列化,这在Ajax提交数据时非常有用。其实该方法在jQuery库中已经存在很长的时间了,但一直很少谈及,所以很多的程序员都忽略了它。通过jQuery中的Ajax方法提交整个表单将变得非常简单。
1 2 3 4 |
var myForm = $('#my-form'); jQuery.post('submit.php', myForm.serialize(), function(){ alert('Data has been sent!'); }); |
jQuery同样也通过了一个’serializeArray’方法,他通常用在多个form表单存在,需要自行收集数据的情况。在jQuery的命名空间下有一个’param’辅助方法可以将一个数组对象处理后返回成一个查询字符串。
1 2 3 4 5 6 7 8 |
var data = { name: 'Joe', age: 44, profession: 'Web Developer' }; jQuery.param(data); // => "name=Joe&age=44&profession=<wbr>Web+Developer" </wbr> |
4.任何元素都可以动画方式展现:
jQuery中的’animate’方法也许是最灵活的jQuery的方法。它可以用几乎任何东西来制作动画,而不仅仅是CSS属性,或者是DOM元素。通常会这样使用’动画’:
1 2 3 4 |
jQuery('#box').animate({ left: 300, top: 300 }); |
当您给.animate()方法指定一个属性时(例如’top’),jQuery会检查你是否是想通过某个css属性来控制动画风格。首先jQuery会检查css样式中是否存在该top属性,若不存在,则jQuery会自行地给对应元素加上该属性。下面是一个例子:
1 2 3 4 |
jQuery('#box').animate({ top: 123, foo: 456 }); |
上面的代码中’top’是一个可用的css属性,则jQuery就会改变’element.style.top’,但是’foo’不是一个可用的css属性,所以jQuery将只更新’element.foo’。
我们可以利用这个优点来实现一些有趣的效果。比方说,例如,您要在一个画布上使一个正方形动画起来。首先让我们定义一个简单的构造和一个在每一步都会调用的’drwa’的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function Square(cnvs, width, height, color) { this.x = 0; this.y = 0; this.width = width; this.height = height; this.color = color; this.cHeight = cnvs.height; this.cWidth = cnvs.width; this.cntxt = cnvs.getContext('2d'); } Square.prototype.draw = function() { this.cntxt.clearRect(0, 0, this.cWidth, this.cHeight); this.cntxt.fillStyle = this.color; this.cntxt.fillRect(this.x, this.y, this.width, this.height); }; |
通过jQuery方法创建一个canvas画布元素(需要html5支持),再实例化一个正方形对象,通过调用.animate()方法在动画的每一步过程中调用.draw()方法,这样就可以轻易地使该正方形动画起来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Create a <canvas /> element var canvas = $('<canvas />').appendTo('body'<wbr>)[0]; canvas.height = 400; canvas.width = 600; // Instantiate Square var square = new Square(canvas, 70, 70, 'rgb(255,0,0)'); jQuery(square).animate({ x: 300, y: 200 }, { // 'draw' should be called on every step // of the animation: step: jQuery.proxy(square, 'draw'), duration: 1000 }); </wbr> |
这是一个非常简单的效果,但它清楚地表明了jQuery的无限可能性。你可以通过下面的链接看到具体的效果(需要浏览器支持html5):Demo
5.jQuery.ajax方法返回XHR对象:
jQuery的 Ajax方法是一个多功能的方法,它包含了’jQuery.ajax’, ‘jQuery.get’, ‘jQuery.post’等多个方法,这些方法在调用后都会返回一个’XMLHttpRequest’ 对象,从而来实现请求完成后的后续操作。如:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var curRequest; jQuery('button.makeRequest').click(function(){ curRequest = jQuery.get('foo.php', function(response){ alert('Data: ' + response.responseText); }); }); jQuery('button.cancelRequest').click(function(){ if (curRequest) { curRequest.abort(); // abort() is a method of XMLHttpRequest } }); |
上面的代码中当我们点击’makeRequest’按钮时,Ajax请求将会被触发。而当我们点击’cancelRequest’按钮时,该请求则会被取消。
另一个潜在的用途是同步请求:
1 2 3 4 5 6 |
var myRequest = jQuery.ajax({ url: 'foo.txt', async: false }); console.log(myRequest.responseText); |
请多的资料可以阅读‘XMLHttpRequest’,也可以阅读Ajax的API文档jQuery’s Ajax utilities
6.自定义队列:
jQuery的有一个内置的队列机制,一般都是有.animate等动画方法使用的(如:.fadeOut()、.fadeIn()等,实质都是有.animate()方法实现)。这种队列机制可以用一个简单的动画就可以说明:
1 2 3 4 5 |
jQuery('a').hover(function(){ jQuery(this).animate({paddingLeft:'+=15px'}); }, function(){ jQuery(this).animate({paddingLeft:'-=15px'}); }); |
快速地在一个链接标记上鼠标移入、移出,当再次移入时,会导致动画的效果反复执行。不信你可以到这里试试:Demo
‘queue’方法和大家熟知的’each’方法比较相似,你通过给方法传递一个函数参数,则该函数将被匹配集合中的每个元素所调用:
1 2 3 |
jQuery('a').queue(function(){ jQuery(this).addClass('all-done').dequeue(); }); |
给’queue’方法只传入一个函数参数的话会导致该函数被添加到默认的’fx’队列中。若刚好该队列会被jQuery中的所有动画对象所调用,那么只有等前面的这些对象都调用后,才会轮到自己。
鉴于该点,在上面的代码中我给对象添加了一个名为’all-done’的class,根据协议,这个class只有在当前所有的动画都执行完成后才会添加。在代码中我们也调用了.dequeue()方法。这一点很重要,它将使jQuery的继续进行队列。jQuery1.4版本提供了另一个可以继续队列的方法nextItemInQueue(),它可以用来取代调用.dequeue()方法。它的调用只需将第一个参数传递给方法即可:
1 2 3 4 5 |
jQuery('a').queue(function(<wbr>nextItemInQueue){ // Continue queue: nextItemInQueue(); }); </wbr> |
当然两个方法也不完全相同,nextItemInQueue()可以在方法体内部的任何地方都可以调用,即使在一团糟的匿名函数内(典型情况是’this’对象被破坏)。当然在1.4版本前,你可以尽可能地保存一个对’this’对象的引用,但这样使用起来有点累。
要想向自定义队列中添加方法,只需将你自定义的队列名称作为第一参数,而将方法体作为第二参数传入即可:
1 2 3 4 |
jQuery('a').queue('customQueueName', function(){ // Do stuff jQuery(this).dequeue('customQueueName'); }); |
需要认识的一点,为了不将该队列添加到默认的’fx’队列中,我们需要将自定义的队列名传入.dequeue()方法中,这样在队列结束后,可以保证jQuery队列可以继续执行下去。
更多的资料可以阅读‘queue’,‘dequeue’,‘jQuery.queue’
7.事件命名空间:
jQuery提供了一个命名时间名称的方法,这在编写插件或第三方组件时非常有用。当需要时,您的插件用户可以通过取消绑定这些你注册事件名称即可。
向命名空间中添加注册一个事件处理名称,只需在事件名称后添加自定义的后缀名(如:.fooPlugin):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
jQuery.fn.foo = function() { this.bind('click.fooPlugin', function() { // do stuff }); this.bind('mouseover.fooPlugin', function() { // do stuff }); return this; }; // Use the plugin: jQuery('a').foo(); // Destroy its event handlers: jQuery('a').unbind('.fooPlugin'); |
取消绑定是只需调用.unbind()方法,并传入自定义事件名称即可实现。
总结:
jQuery中的隐藏功能远远不止这些,在以后的文章中会再总结一些我自己发现的功能与大家分享。
发表评论
文章已被作者锁定,不允许评论。
-
[转载]jquery中的一个小TIPS:鼠标移动到连接时发出声音
2012-06-05 16:24 917这个TIPS其实很简单的,实现的效果是:当鼠标移动到链接上时, ... -
gson入门示例
2011-03-07 23:29 2285项目介绍:GSON Gson是Google的一个开源项目,可以 ... -
google gson学习
2011-03-07 23:23 23241.简单的处理list和map Java代码 ... -
jquery ajax中各个事件执行顺序如下
2011-03-01 11:53 2572jquery中各个事件执行顺序如下:1.ajaxStart(全 ... -
eclipse 安装插件spket
2011-01-30 11:23 1557(一下文章摘自博客园htt ... -
jQuery性能优化指南(1)
2010-11-17 20:00 951jQuery性能优化指南(1) ... -
分步提交表单解决方案
2010-10-13 16:54 1674以前只听过有这个东东,现如今自己也要做这个了,做之前也有所耳闻 ... -
ajax乱码解决
2010-09-14 23:42 1048由于ajax数据发送数据编码方式为UTF-8,所以在发送传送汉 ... -
jQuery:如何在页面和插件代码中自定义别名
2010-09-01 18:18 881众所周知,jQuery是采 ... -
插件前的分号
2010-09-01 18:13 1094在我阅读国外的开发人员编写的插件时,发现很多的插件都会在代码的 ... -
你还不会创建jQuery插件 ?
2010-09-01 18:05 1028版权声明:原创作品,允许转载,转载时请务必以超链接形 ... -
jQuery select 无法设置selected属性。未指明的错误
2010-09-01 14:16 2342来自于:http://ycq.ngwz.com/redirec ... -
jQuery-DOM对象和jQuery对象及转换
2010-08-31 11:11 828刚开始学习jQuery,可能一时会分不清楚哪些是jQuery对 ... -
JSON VS XML
2010-08-31 11:09 875·可读性 JSON和XML的可读性可谓不相上下,一边是建议的 ... -
新消息闪烁标题提示代码分享[转]
2010-08-17 16:41 881本文纯粹是贴出一些比较实用的代码出来供大家学习和使用,也算是个 ... -
jQuery:通过事件委派一次绑定多种事件,以减少事件冗余
2010-08-17 16:34 981jQuery的最大特色之一就是方法连缀写法,这样的书写方式使得 ... -
jQuery:如何在页面和插件代码中自定义别名
2010-08-17 16:26 771众所周知,jQuery是采 ...
相关推荐
3. 动画效果:可添加平滑的动画效果,例如揭露格子时的过渡效果。 二、前端技术应用 前端技术在扫雷网页版中的核心任务是将游戏逻辑与用户界面结合,主要包括HTML、CSS和JavaScript(包括jQuery): 1. HTML结构...
在本主题中,我们关注的是jQuery的"擦拭效果",这是一个创新的视觉效果,通常用于图片或者画布元素上,通过模拟橡皮擦的动作来逐渐揭示隐藏的内容。这种效果可以用于增加用户交互性,提升网页的吸引力。 首先,让...
:sparkles: 记忆游戏这是一个用于测试用户内存... 获得最佳时间获得最低的移动量 :sparkles: 安装软件不需要任何安装,只需运行index.html :sparkles: 技术: HTML CSS JavaScript jQuery的 :sparkles: 演示版现场代码
语言:中文 (繁體) 隐藏并消音所有噗浪偷偷说。...就不需要这个外挂了 ## 实作细节* 使用 jQuery Selector 过滤出「偷偷说」的 plurk* 修改 CSS property 在视觉上将「偷偷说」的 DOM 隐藏* 使用 AJAX
"御剑"可能是这个工具的名字,暗示其具有强大的功能,能够像古代武侠小说中的神兵利器一样,精准地识别人的网络"指纹"。 【描述解析】 描述中只给出了文件名"御剑WEB指纹识别.rar",这是一个RAR格式的压缩包文件,...
为了实现“兼容IE、FF”,开发者可能采用了如jQuery这样的JavaScript库,它在老版本的浏览器中有着良好的支持。此外,可能还应用了CSS3的渐进增强或优雅降级策略,确保在不支持新特性的浏览器中也能正常工作。例如,...
这个项目采用jQuery和Bootstrap这两个流行的前端技术框架来构建,旨在为用户提供一个简洁、用户友好的界面来探索和理解棒球相关的统计数据。 JavaScript是这个应用的核心编程语言,它在Web开发中广泛用于实现动态...
工具可能是一个用来揭露或解析某些隐藏信息的程序。标签 "turkey turkiye" 明确指出这与土耳其有关,而 "covid-19 koronavirus" 指的是全球大流行的新型冠状病毒疾病。最后一个标签 "HTML" 表明这个项目可能与网页...
SOLUCIÓN:电影Whithout冲突商标快速浏览布雷弗的揭露: 电影《无冲突》,无网络电影,无网络电影,移动电影,最终电影电视和电影节。原始IPO:全球视野艾尼西奥(INICIO YPRESENTACIÓN)FLUJO VERPELÍCULASÓ...
如果项目中包含JavaScript代码,那么可能使用了jQuery、React、Vue等库或框架来增强用户体验。 为了深入理解这个项目,我们需要查看源代码中的具体实现。HTML文件将展示网页的组织结构,CSS文件会揭示设计风格和...
5. **响应式设计**:JavaScript库如jQuery或现代框架如Vue、React可以帮助实现设备适配,让网站在不同设备上表现良好。 为了详细了解这个项目,你需要解压文件并查看源代码。HTML文件揭示了页面结构,CSS文件展示了...
这个项目通过非营利的方式,揭露并讨论了一些备受争议的州长的代表性言论,以此来促进公众对政治透明度的关注和讨论。在技术实现上,它主要使用了 CSS 这一前端设计语言,为网站提供了视觉呈现和交互体验。 在开源...
开发者可能使用了像jQuery这样的库来简化JavaScript编程,或者利用了Web Audio API来控制音频播放。如果项目包含其他文件,如JSON或XML,它们可能用于存储歌曲信息,如艺术家、专辑、曲目等。 总的来说,"dhun-...