zoukankan      html  css  js  c++  java
  • JQuery拾遗

    1.关于JQuery的animate,可以操作background么?

    答:如果是单纯的JQuery不可以,需要引入JQuery的ui核心库。否则只支持宽高、透明度、上下左右位置的变化。

    2.能否说一下JQuery的queue能够解决什么问题?使用的时候需要注意什么?

    答:可以操作函数队列,添加或删除函数,以此改变函数的执行顺序。比如我调用了一个div对象的三个方法:show animate addclass,addclass总是不能等到animate执行完毕后才能执行,所以我需要把addclass写到queue里,这样addclass就能同步执行了。

    3.如何让回调函数可以链式执行?

    答:可以使用deferred对象,比如1.5.0后的AJAX方法可以将成功执行函数和失败执行函数写成:$.ajax(url).done().fail();而不是像原来的$.ajax(url,funcSucc,funcFail),那么不优雅。(ajax方法就是因为有了deferred才变成这样)。那么deferred怎么用呢?请看例子:

    var dtd = $.Deferred(); // 新建一个Deferred对象
    
      var wait = function(dtd){
    
        var tasks = function(){
    
          alert("执行完毕!");
    
          dtd.resolve(); // 改变Deferred对象的执行状态
    
        };
    
        setTimeout(tasks,5000);
    
        return dtd.promise(); // 返回promise对象
    
      };
    
      var d = wait(dtd); // 新建一个d对象,改为对这个对象进行操作
    
      $.when(d)
    
      .done(function(){ alert("哈哈,成功了!"); })
    
      .fail(function(){ alert("出错啦!"); });

    $.Deferred()对象有如下几种有用的方法:

    (1) $.Deferred() 生成一个deferred对象。

      (2) deferred.done() 指定操作成功时的回调函数

      (3) deferred.fail() 指定操作失败时的回调函数

      (4) deferred.promise() 没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。

      (5) deferred.resolve() 手动改变deferred对象的运行状态为"已完成",从而立即触发done()方法。

      (6)deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。

      (7) $.when() 为多个操作指定回调函数。

    除了这些方法以外,deferred对象还有二个重要方法,上面的教程中没有涉及到。

      (8)deferred.then()

    有时为了省事,可以把done()和fail()合在一起写,这就是then()方法。

      $.when($.ajax( "/main.php" ))

      .then(successFunc, failureFunc );

    如果then()有两个参数,那么第一个参数是done()方法的回调函数,第二个参数是fail()方法的回调方法。如果then()只有一个参数,那么等同于done()。

      (9)deferred.always()

    这个方法也是用来指定回调函数的,它的作用是,不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。

      $.ajax( "test.html" )

      .always( function() { alert("已执行!");} );

     4.JQuery的extend方法

    该静态方法的主要作用就是扩展原对象后,返回一个新对象。

    比如 var obj={name:'jack',sex:'man'} ;var obj2={name:'mary',tel:'12345678'}; var obj3=$.extend(obj,obj2);

    此时obj3就是{name:'mary',sex:'man',tel:'12345678'} 后者会把前者所有的东西覆盖。

    PS:关于JQuery插件的写法,该地址博客给出了完美的解答:http://www.iteye.com/topic/545971

  • 相关阅读:
    Java中遍历Set集合的方法
    分布式RPC框架Apache Dubbo
    CSS:页面美化和布局控制
    JavaScript实例
    Codeforces Round #604 题解
    洛谷P1533 可怜的狗狗题解
    Educational Codeforces Round 81 题解
    P1494 [国家集训队]小Z的袜子 题解
    洛谷P1283 平板涂色题解
    洛谷P1220 关路灯题解
  • 原文地址:https://www.cnblogs.com/JhoneLee/p/3554137.html
Copyright © 2011-2022 走看看