1.jQuery()创建DOM元素:支持传参设置属性

之前,jQuery可以通过 attr 方法设置元素的属性,既可传属性的名和值,也可以是包含几组特定 属性名值对 的 对象。在 jQuery 1.4 中,你可以把一个参数对象作为附属参数传给 jQuery 函数本身,同时创建HTML元素。

比方说你想要创建一个带有几个属性的锚记元素(<a></a>)。在1.4中,一切如此简单:

  1. jQuery('<a></a>',{
  2. id:'foo',
  3. href:'http://google.com',
  4. title:'BecomeaGoogler',
  5. rel:'external',
  6. text:'GotoGoogle!'
  7. });
 

你大概也能猜到,这个锚记元素没有的 text 属性会调用 jQuery 的私有方法”.text()” ,把元素里的文字设置为“Go to Google!”

针对这一用法,下面是更有用的实例:

  1. jQuery('
  2. <div>',{
  3. id:'foo',
  4. css:{
  5. fontWeight:700,
  6. color:'green'
  7. },
  8. click:function(){
  9. alert('Foohasbeenclicked!');
  10. }
  11. });</div>
 

id 为一般属性,被直接加上了,而 css 和 click 则激发了相应的 jQuery 方法。在1.4以前,上面的代码需写成这个样子:

  1. jQuery('
  2. <div>')
  3. .attr('id','foo')
  4. .css({
  5. fontWeight:700,
  6. color:'green'
  7. })
  8. .click(function(){
  9. alert('Foohasbeenclicked!');
  10. });</div>
 

2. parentsUntil()、prevUntil()、nextUntil()

1.4的DOM遍历工具包里又增加了3个新方法:nextUntil, prevUntil 和 parentsUntil。这些方法会按照特定的方向遍历DOM,直到遇到满足指定选择符的元素为止。举例来说,现 在我们有一张水果名的清单:

  1. <ul>
  2. <li>Apple</li>
  3. <li>Banana</li>
  4. <li>Grape</li>
  5. <li>Strawberry</li>
  6. <li>Pear</li>
  7. <li>Peach</li>
  8. </ul>
 

我们想挑选出所有在 Apple 后,Pear 前的所有条目。代码十分简单:

  1. jQuery('ulli:contains(Apple)').nextUntil(':contains(Pear)');
  2. //选出的是Banana,Grape,Strawberry
 

3. bind()、one()支持绑定多个事件

不再需要把各个事件绑定方法“链”在一起,现在你可以把它们捆成一堆,如下:

  1. jQuery('#foo).bind({
  2. click:function(){
  3. //dosomething
  4. },
  5. mouseover:function(){
  6. //dosomething
  7. },
  8. mouseout:function(){
  9. //dosomething
  10. }
  11. })
 

这一用法也适用于 “.one()”.

4. 动画效果Easing的增强

在jQuery1.4以前版本只能为一个动画指定一种缓动效果。现在你可以为动画的各 个属性参数指定不同的缓动效果:

  1. jQuery('#foo').animate({
  2. left:500,
  3. top:[500,'easeOutBounce']
  4. },2000);
 

你也可以在一个可选的动画选项对象中为 secialEasing 设置一系列名值对来完全上面的工作:

  1. jQuery('#foo').animate({
  2. left:500,
  3. top:500
  4. },{
  5. duration:2000,
  6. specialEasing:{
  7. top:'easeOutBounce'
  8. }
  9. });
 

5. 增强版的 live() 事件

jQuery 1.4 添加了对指派 submit , change , focus 和 blur 事件的支持。在jQuery中,我们利用”.live()” 方法指派事件。当你想要为多个元素注册事件处理器时,这会非常有用。而且就算满足选择符的元素是新出现的,这些事件也会继续有效(使用 .live() 比不断重复绑定要省力省心得多)。

不过,当心了!注册 focus 和 blur 事件时你需要用 focusin 和 focusout 作为事件名。

  1. jQuery('input').live('focusin',function(){
  2. //dosomethingwiththis
  3. });
 

6. 使用proxy()函数指定this

jQuery 1.4 提供了一个全新的 proxy 函数,位于 jQuery 命名空间下。这一函数接受两个参数,一个是“作用域”(scope)或者一个方法名,另一个是某函数或者目标作用域(the intended scope)。

众所周知, JavaScript的 this 关键字是一个很难把握的东西。有时候你并不想它代表一个元素,而想让它代表你前面创建的某个对象。

例如,在这里我们创建了一个 app 对象,它拥有两个属性,一个是 clickHandler 方法,一个是负责参数配置的对象。

  1. varapp={
  2. config:{
  3. clickMessage:'Hi!'
  4. },
  5. clickHandler:function(){
  6. alert(this.config.clickMessage);
  7. }
  8. };
 

这个 clickHandler 方法,当像 app.clickHandler() 这样调用时,app 就是其上下文,也就是说 this 关键字指向的是 app 。如果只需简单地调用,这样的写法没什么问题:

  1. app.clickHandler();//"Hi!"isalerted
 

不过如果把它当作一个事件处理器:

  1. jQuery('a').bind('click',app.clickHandler);
 

当我们点击这个锚记时,并没有达到预想的效果(没东西 alert 出来)。这是因为 jQuery (以及大部分理智的事件模型),默认地,都会把处理器的上下文指定为目标元素本身。也就是说,this 所代表正是被点击的这个链接。而我们想的是,this 应该继续代表 app 。在jQuery 1.4中,实现这一目的十分简单:

  1. jQuery('a').bind(
  2. 'click',
  3. jQuery.proxy(app,'clickHandler')
  4. );
 

现在点击所有锚记都会弹出“Hi!”了。

代理函数把你的函数包裹一圈,同时把函数内的 this 设定为你想要东西。在其他上下文应用场景,如把回调函数传给其他 jQuery 方法或插件,代理函数也能派上用场。

7. 动画队列延迟

现在,可以给动画队列加一个延迟了。虽然这个功能可以在任何队列里实现,但最常用的可能还是延迟“fx 队列”(”fx” queue,jQuery默认的动画队列)。它能让你在两个动画行为之间暂停一下,而不用牵扯到回调函数和 setTimeout 之类的东西。.delay() 的第一个参数即你需要设定的延迟毫秒数:

  1. jQuery('#foo')
  2. .slideDown()//Slidedown
  3. .delay(200)//Donothingfor200ms
  4. .fadeIn();//Fadein
 

如果你想延迟一个除 fx 以外的队列,把队列名作为第二个参数传给 .delay() 就可以了。

8. 使用has()检测元素是否含有特定内容

jQuery 1.4 让检测一个元素(或集合)是否含有(.has())某项东西更为容易。其背后的机理和选 择过滤器 :has()是一样的。这个方法会从当前集合中选出满足任意指定条件之一的元素。

  1. jQuery('div').has('ul');
 

这条语句在所有DIV元素中挑出那些包含UL元素的。这种情况可能用选择过滤器 :has() 就好了,但当你要更程式化地过滤选择集时 .has() 方法就十分有用了。

jQuery 1.4 还在 jQuery 命名空间下新增了一个 contains 函数。这是一个比较底层的函数,接受两个 DOM 节点为参数。返回一个布尔值,指示第二个元素是否包含在第一个元素中。例如:

jQuery.contains(document.documentElement, document.body); // 返回true – 确实包含在中

9. 给元素剥皮!

很早以前,jQuery 就可以用 .wrap() 给元素裹一层皮。现在, jQuery 1.4 添加了 .unwrap() 方法,用以剥皮。看下面的DOM结构:

  1. <div>
  2. <p>
  3. Foo
  4. </p>
  5. </div>
 

来把 p 元素外面的一层皮(div)剥掉:

  1. jQuery('p').unwrap();
 

DOM 变成了:

  1. <p>
  2. Foo
  3. </p>
 

总而言之,这个方法可以把任意元素的父元素移除。

10. 使用detach()移除元素,而不删除数据

以前有一个.remove()方法,是把元素剥离后抛弃。全新的 .detach() 方法可以让你把一个元素从DOM中剥离,而不丢失数据。囊括该元素的 jQuery 对象会在操作完成后还保留这个元素。数据可以通过 .data() 或者 jQuery 事件系统中的任意事件处理器传入 jQuery 对象。

当你需要把某个元素从DOM中移除,然后在将来某个场景中重新引入时,这个函数会很有用。元素的事件句柄和其他所有数据都会被保留。

  1. varfoo=jQuery('#foo');
  2. //绑定一个重要的事件处理器
  3. foo.click(function(){
  4. alert('Foo!');
  5. });
  6. foo.detach();//从DOM中移除
  7. //…dostuff
  8. foo.appendTo('body');//重新加入到DOM
  9. foo.click();//弹出alert信息:"Foo!"
 

11. index() 的功能增强

jQuery 1.4 为您使用 .index() 提供了两种新方法。以前,你必须把元素作为参数传给它,然后获得一个返回的数值,代表在当前集合中这个元素的索引。现在,如果不传参数过去,返回的值就代 表某元素在其同辈中排行老几。比方说下面的DOM:

  1. <ul>
  2. <li>Apple</li>
  3. <li>Banana</li>
  4. <li>Grape</li>
  5. <li>Strawberry</li>
  6. <li>Pear</li>
  7. <li>Peach</li>
  8. </ul>
 

你想要晓得点击一个条目后它是列表中的第几个,实现的代码十分简单:

  1. jQuery('li').click(function(){
  2. alert(jQuery(this).index());
  3. });
 

jQuery 1.4 也允许你将选择符作为 .index() 的第一个参数。这样做会返回当前元素在你指定的选择符所匹配出的元素集合中的索引值。

还得提醒一点,这一方法返回的是数值,如果文档中无法找到指定条件的元素,会返回数值 -1 。

12. DOM 操作可接收回调函数

现在,大部分的DOM操作方法都支持了将 函数 作为单一参数传入(.css() 和 .attr() 传入为第二个参数)。这个函数会为选择集中的每一个元素都跑一遍,从而为相应操纵方法提供更“有个性”的值。

下列方法支持这一功能:

  1. after()
  2. before()
  3. append()
  4. prepend()
  5. addClass()
  6. toggleClass()
  7. removeClass()
  8. wrap()
  9. wrapAll()
  10. wrapInner()
  11. val()
  12. text()
  13. replaceWith()
  14. css()
  15. attr()
  16. html()

有了回调函数,你就能在选择集中利用 this 关键字来访问当前元素,用回调函数的第一个参数来访问其索引值。

  1. jQuery('li').html(function(i){
  2. return'Indexofthislistitem:'+i;
  3. });
 

还有还有,上面的某些方法还提供第二个参数供你利用。如果你调用的是一个设定型方法(如.html() 和 .attr(’href…) ),你还能取得当前值。例如:

  1. jQuery('a').attr('href',function(i,currentHref){
  2. returncurrentHref+'?foo=bar';
  3. });
 

如您所见,对于.css() 和 .attr() 方法来说,之所以要把函数作为 第二个参数传递,是因为第一个参数要用来指定我们需要修改的是哪一个属性:

  1. jQuery('li').css('color',function(i,currentCssColor){
  2. returni%2?'red':'blue';
  3. });
 

13. 判定对象类型:isEmptyObject、isPlainObject

jQuery 1.4 新增了两个全新的辅助函数(都直接位于 jQuery 命名空间下),可以帮助你判别你正在操纵的是何种对象。

第一个函数是 isEmptyObject, ,它返回一个布尔值,判定对象是否为空()。第二个是 isPlainObject ,它返回的布尔值代表传递过去的参数是否为JavaScript的简单对象(plain object),也就是用 {} 或 new Object()创建的对象。

  1. jQuery.isEmptyObject({});//true
  2. jQuery.isEmptyObject({foo:1});//false
  3. jQuery.isPlainObject({});//true
  4. jQuery.isPlainObject(window);//false
  5. jQuery.isPlainObject(jQuery());//false
 

14. Closest() 的功能增强

jQuery的.closest() 方法现在可以接受一组选择符作为参数。当你需要遍历某一元素的所有上级, 找到一个以上符合特定特征的最近元素时,此功能就能派上用场。

而且,现在它还能接受上下文环境作为第二个参数,也就是说你可以控制DOM遍历的深度或者说远度。虽然说大家可能很少会用到这两个新特性,但一旦用 上效果是惊人的!

15. 新事件: focusIn 与 focusOut

如前所述,现在部署 focus 和 blur 事件时,你需要使用 focusin 和 focusout 这两个新事件。这两个事件帮助你在特定元素或者该元素的子元素 获取/失去 焦点时采取行动。

  1. jQuery('form')
  2. .focusin(function(){
  3. jQuery(this).addClass('focused');
  4. });
  5. .focusout(function(){
  6. jQuery(this).removeClass('focused');
  7. });
 

值得说明的是,这两个事件不会传播开来(即所谓的“冒泡”),它们会被捕获住。

jQuery 1.4版本的15个新功能(现在已经发布到jquery1.8,特别是增强版的live事件,支持 submit , change , focus 和 blur 事件)的更多相关文章

  1. React 17 发布候选版本, 没有添加新功能

    React 17 发布候选版本, 没有添加新功能 React v17.0 Release Candidate: No New Features https://reactjs.org/blog/202 ...

  2. PHP 5.2、5.3、5.4、5.5、5.6 版本区别对比以及新功能详解

    截至目前(2015.1), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护  的 PHP5.2, 其余的一半用户在使用 PHP5.3 . 因为 PHP 那“集百家之 ...

  3. 五指CMS发布1.4版本,更多的新功能

    五指cms v1.4变更: 新增内容手动分页新增百度地图新增订单管理模块新增订单地址管理增加Microsoft YaHei字体新增推广邀请模块新增私密下载,下载函数 新增百度地图新增筛选功能 修正全局 ...

  4. Apache Pulsar 2.6.1 版本正式发布:2.6.0 功能增强版,新增 OAuth2 支持

    在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布! Apache Pulsar 2.6.1 修复 ...

  5. jQuery focus、blur事件 添加、删除类名

    jQuery.focusblur = function(ele,className){ var focusblurid = $(ele); focusblurid.focus(function(){ ...

  6. OpenStack Q版本新功能以及各核心组件功能对比

    OpenStack Q版本已经发布了一段时间了.今天, 小编来总结一下OpenStack Q版本核心组件的各项主要新功能, 再来汇总一下最近2年来OpenStack N.O.P.Q各版本核心组件的主要 ...

  7. Windows 10 版本 1507 中的新 AppLocker 功能

    要查看 Windows 10 版本信息,使用[运行]> dxdiag  回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...

  8. 【老孟Flutter】Flutter 2的新功能

    老孟导读:昨天期待已久的 Flutter 2.0 终于发布了, Flutter Web和Null安全性趋于稳定,Flutter桌面安全性逐渐转向Beta版! 原文链接:https://medium.c ...

  9. ceph luminous 新功能之内置dashboard 之 mgr功能模块配置

    前言 ceph luminous版本新增加了很多有意思的功能,这个也是一个长期支持版本,所以这些新功能的特性还是很值得期待的,从底层的存储改造,消息方式的改变,以及一些之前未实现的功能的完成,都让ce ...

随机推荐

  1. PHP函数详解:call_user_func()使用方法

    call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: <?php function nowamagic($a,$b) { echo $a; echo $b; } cal ...

  2. Python基础——概述

    新建Python代码 Jupyter Notebook是在浏览器中运行的. 地址栏输入http://localhost:8888后直接进入工作文件夹,显示文件夹中的内容. 右上角选择New——Pyth ...

  3. LeetCode(206) Reverse Linked List

    题目 Reverse a singly linked list. click to show more hints. Hint: A linked list can be reversed eithe ...

  4. stm32F4中断分析-HAL库

    详细可以参考: STM32使用HAL库操作外部中断——实战操作 https://www.cnblogs.com/wt88/p/9624103.html /** ******************** ...

  5. nrf52810学习笔记——二

    nrf52810为nordic支持蓝牙 5.0性价比最高的一款芯片,不过这个芯片的rom不得不吐槽下,只有192KB,不知道为什么定了个192,而不是大家所熟悉的256KB,估计价格是个原因吧,15. ...

  6. linux的vi和vim编辑器操作

    vi:linux内部的文本编辑器:vim:vi的增强版,具有程序编辑的能力. vi和vim的三种常见模式: (1)正常模式(一般模式):vim一打开就是这种模式,此模式下可以使用各种快捷键,比如复制粘 ...

  7. html5/css3常考面试题

    一.HTML5 CSS3 CSS3有哪些新特性? 1. CSS3实现圆角(border-radius),阴影(box-shadow), 2. 对文字加特效(text-shadow.),线性渐变(gra ...

  8. luogu3381 【模板】最小费用最大流

    每次选代价最小的流增广 #include <iostream> #include <cstring> #include <cstdio> #include < ...

  9. WordCount 2.0(结对项目)

    序言 合作伙伴 201631062220      201631062120 项目码云地址: https://gitee.com/zhege/WordCount 作业详细要求 系统分析与设计结对项目 ...

  10. x86 保护模式 十 分页管理机制

    x86   保护模式  十  分页管理机制 8.386开始支持分页管理机制 段机制实现虚拟地址到线性地址的转换,分页机制实现线性地址到物理地址的转换.如果不启用分页,那么线性就是物理地址 一  分页管 ...