• JQuery:选择器、动画、AJAX请求


    选择器

    1、事件编程与动画效果

        一个选择器可以在概念上理解为指针。借助与JQuery库中的选择器$,线程可以获取到界面元素的引用,从而可以调用 ready()、click()方法把用户事件和动作方法关联起来,同时还可以调用show()、hide()、toggle()、slideUp()、slideDown()等实现jQuery内置的动画效果。

        更进一步,如果使用JQuery Easing,那么对应函数的参数不是字符串而是字典,可以获得丰富的效果。使用JQuery Easing的代码如下:

    $(element).slideUp({ 
        duration: 1000,  
        easing: method,  
        complete: callback 
    });     

    参数duration:定义动画运动时间,毫秒,其实就是速度,时间越短,运动速度越快。
    参数easing:指定动画效果,Easing js提供多种动画效果,有匀速运动、变加速运动、缓冲波动效果。
    参数complete:动画结束后回调函数callback,可以自定义动画结束后的调用函数。

    ps1: $("#e")[0] 等价于 document.getElementById("e"),$(function(){})等价于$(document).ready(function(){})

    ps2: 说一下jquery $(document).ready() 与window.onload的区别

    window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行。 
    $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。

    window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个 

    $(document).ready()可以同时编写多个,并且都可以得到执行

     2、多种选择方法

        选择器使用方法如下:

    $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 
    $("div")           选择所有的div标签元素,返回div元素数组 
    $(".myClass")      选择使用myClass类的css的所有元素 
    $("*")             选择文档中的所有的元素,可以运用多种的选择方式进行联合选择:例如$("#myELement,div,.myclass") 
    层叠选择器: 
    $("form input")         选择所有的form元素中的input元素 
    $("#main > *")          选择id值为main的所有的子元素 
    $("label + input")     选择所有的label元素的下一个input元素节点,经测试选择器返回的是label标签后面直接跟一个input标签的所有input标签元素 
    $("#prev ~ div")       同胞选择器,该选择器返回的为id为prev的标签元素的所有的属于同一个父元素的div标签 
    基本过滤选择器: 
    $("tr:first")               选择所有tr元素的第一个 
    $("tr:last")                选择所有tr元素的最后一个 
    $("input:not(:checked) + span")   
    过滤掉:checked的选择器的所有的input元素 
    $("tr:even")               选择所有的tr元素的第0,2,4... ...个元素(注意:因为所选择的多个元素时为数组,所以序号是从0开始) 
    $("tr:odd")                选择所有的tr元素的第1,3,5... ...个元素 
    $("td:eq(2)")             选择所有的td元素中序号为2的那个td元素 
    $("td:gt(4)")             选择td元素中序号大于4的所有td元素 
    $("td:ll(4)")              选择td元素中序号小于4的所有的td元素 
    $(":header") 
    $("div:animated") 
    内容过滤选择器: 
    $("div:contains('John')") 选择所有div中含有John文本的元素 
    $("td:empty")           选择所有的为空(也不包括文本节点)的td元素的数组 
    $("div:has(p)")        选择所有含有p标签的div元素 
    $("td:parent")          选择所有的以td为父节点的元素数组 
    可视化过滤选择器: 
    $("div:hidden")        选择所有的被hidden的div元素 
    $("div:visible")        选择所有的可视化的div元素 
    属性过滤选择器: 
    $("div[id]")              选择所有含有id属性的div元素 
    $("input[name='newsletter']")    选择所有的name属性等于'newsletter'的input元素 
    $("input[name!='newsletter']") 选择所有的name属性不等于'newsletter'的input元素 
    $("input[name^='news']")         选择所有的name属性以'news'开头的input元素 
    $("input[name$='news']")         选择所有的name属性以'news'结尾的input元素 
    $("input[name*='man']")          选择所有的name属性包含'news'的input元素 
    $("input[id][name$='man']")    可以使用多个属性进行联合选择,该选择器是得到所有的含有id属性并且那么属性以man结尾的元素 
    子元素过滤选择器: 
    $("ul li:nth-child(2)"),$("ul li:nth-child(odd)"),$("ul li:nth-child(3n + 1)") 
    $("div span:first-child")          返回所有的div元素的第一个子节点的数组 
    $("div span:last-child")           返回所有的div元素的最后一个节点的数组 
    $("div button:only-child")       返回所有的div中只有唯一一个子节点的所有子节点的数组 
    表单元素选择器: 
    $(":input")                  选择所有的表单输入元素,包括input, textarea, select 和 button 
    $(":text")                     选择所有的text input元素 
    $(":password")           选择所有的password input元素 
    $(":radio")                   选择所有的radio input元素 
    $(":checkbox")            选择所有的checkbox input元素 
    $(":submit")               选择所有的submit input元素 
    $(":image")                 选择所有的image input元素 
    $(":reset")                   选择所有的reset input元素 
    $(":button")                选择所有的button input元素 
    $(":file")                     选择所有的file input元素 
    $(":hidden")               选择所有类型为hidden的input元素或表单的隐藏域 
    表单元素过滤选择器: 
    $(":enabled")             选择所有的可操作的表单元素 
    $(":disabled")            选择所有的不可操作的表单元素 
    $(":checked")            选择所有的被checked的表单元素 
    $("select option:selected") 选择所有的select 的子元素中被selected的元素 
    选取一个 name 为”S_03_22″的input text框的上一个td的text值
    $(”input[@ name =S_03_22]“).parent().prev().text() 
    名字以”S_”开始,并且不是以”_R”结尾的
    $(”input[@ name ^='S_']“).not(”[@ name $='_R']“) 
    一个名为 radio_01的radio所选的值
    $(”input[@ name =radio_01][@checked]“).val(); 
     
    $("A B") 查找A元素下面的所有子节点,包括非直接子节点
    $("A>B") 查找A元素下面的直接子节点
    $("A+B") 查找A元素后面的兄弟节点,包括非直接子节点
    $("A~B") 查找A元素后面的兄弟节点,不包括非直接子节点 
    $("A B") 查找A元素下面的所有子节点,包括非直接子节点 
     

    以下为实例: 

    例子:找到表单中所有的 input 元素 
     
    HTML 代码: 
     
    <form>
    <label>Name:</label>
    <input name="name" />
    <fieldset>
          <label>Newsletter:</label>
          <input name="newsletter" />
    </fieldset>
    </form>
    <input name="none" /> 
    jQuery 代码: 
     
    $("form input") 
    结果: 
     
    [ <input name="name" />, <input name="newsletter" /> ] 
     
    2. $("A>B") 查找A元素下面的直接子节点 
    例子:匹配表单中所有的子级input元素。 
     
    HTML 代码: 
     
    <form>
    <label>Name:</label>
    <input name="name" />
    <fieldset>
          <label>Newsletter:</label>
          <input name="newsletter" />
    </fieldset>
    </form>
    <input name="none" /> 
    jQuery 代码: 
     
    $("form > input") 
    结果: 
     
    [ <input name="name" /> ] 
     
    3. $("A+B") 查找A元素后面的兄弟节点,包括非直接子节点 
    例子:匹配所有跟在 label 后面的 input 元素 
     
    HTML 代码: 
     
    <form>
    <label>Name:</label>
    <input name="name" />
    <fieldset>
          <label>Newsletter:</label>
          <input name="newsletter" />
    </fieldset>
    </form>
    <input name="none" /> 
    jQuery 代码: 
     
    $("label + input") 
    结果: 
     
    [ <input name="name" />, <input name="newsletter" /> ] 
     
     
    4. $("A~B") 查找A元素后面的兄弟节点,不包括非直接子节点 
    HTML 代码: 
    
    <form>
    <label>Name:</label>
    <input name="name" />
    <fieldset>
    <label>Newsletter:</label>
    <input name="newsletter" />
    </fieldset>
    </form>
    <input name="none" /> 
    jQuery 代码: 
    
    $("form ~ input") 
    结果: 
    
    [ <input name="none" /> ]

    网络请求

    应用的最多的是 ajax 异步,这里记录一下各种参数。

    1.url
    要求为String类型的参数,(默认为当前页地址)发送请求的地址。

    2.type
    要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。

    3.timeout
    要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。

    4.async
    要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。

    5.cache
    要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。

    6.data
    要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看  processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。

    7.dataType
    要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下:
    xml:返回XML文档,可用JQuery处理。
    html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
    script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。
    json:返回JSON数据。
    jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
    text:返回纯文本字符串。

    8.beforeSend
    要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。
                function(XMLHttpRequest){
                   this;   //调用本次ajax请求时传递的options参数
                }
    9.complete
    要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。
              function(XMLHttpRequest, textStatus){
                 this;    //调用本次ajax请求时传递的options参数
              }

    10.success:要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。
             (1)由服务器返回,并根据dataType参数进行处理后的数据。
             (2)描述状态的字符串。
             function(data, textStatus){
                //data可能是xmlDoc、jsonObj、html、text等等
                this;  //调用本次ajax请求时传递的options参数
             }

    11.error:
    要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下:
           function(XMLHttpRequest, textStatus, errorThrown){
              //通常情况下textStatus和errorThrown只有其中一个包含信息
              this;   //调用本次ajax请求时传递的options参数
           }

    12.contentType
    要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。

    13.dataFilter
    要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。
                function(data, type){
                    //返回处理后的数据
                    return data;
                }

    14.dataFilter
    要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。
                function(data, type){
                    //返回处理后的数据
                    return data;
                }

    15.global
    要求为Boolean类型的参数,默认为true。表示是否触发全局ajax事件。设置为false将不会触发全局ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。

    16.ifModified
    要求为Boolean类型的参数,默认为false。仅在服务器数据改变时获取新数据。服务器数据改变判断的依据是Last-Modified头信息。默认值是false,即忽略头信息。

    17.jsonp
    要求为String类型的参数,在一个jsonp请求中重写回调函数的名字。该值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,例如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。

    18.username
    要求为String类型的参数,用于响应HTTP访问认证请求的用户名。

    19.password
    要求为String类型的参数,用于响应HTTP访问认证请求的密码。

    20.processData
    要求为Boolean类型的参数,默认为true。默认情况下,发送的数据将被转换为对象(从技术角度来讲并非字符串)以配合默认内容类型"application/x-www-form-urlencoded"。如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。

    21.scriptCharset
    要求为String类型的参数,只有当请求时dataType为"jsonp"或者"script",并且type是GET时才会用于强制修改字符集(charset)。通常在本地和远程的内容编码不同时使用。

    以下为实例:

    $(function(){
        $('#send').click(function(){
             $.ajax({
                 type: "GET",
                 url: "test.json",
                 data: {username:$("#username").val(), content:$("#content").val()},
                 dataType: "json",
                 success: function(data){
                             $('#resText').empty();   //清空resText里面的所有内容
                             var html = ''; 
                             $.each(data, function(commentIndex, comment){
                                   html += '<div class="comment"><h6>' + comment['username']
                                             + ':</h6><p class="para"' + comment['content']
                                             + '</p></div>';
                             });
                             $('#resText').html(html);
                          }
             });
        });
    });

    $.ajax()函数启动了一个网络传输任务task,这个任务被表示为一个字典 —— 也就是函数的参数。

    网络传输结束后,再使用选择器更新界面元素和动画效果。

    快捷方法:

    除了全局函数 ajax(),还可以用选择器对象中的load()函数,直接完成一个界面元素的异步更新过程。例如

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("div").ajaxStart(function(){
        $(this).html("<img src='/i/demo_wait.gif' />");
      });
      $("button").click(function(){
        $("div").load("/example/jquery/demo_ajax_load.asp");
      });
    });
    </script>
    </head>
    
    <body>
      <div id="txt"><h2>通过 AJAX 改变文本</h2></div>
      <button>改变内容</button>
    </body>
    </html>

     在选择器中,load()函数会启动异步请求,并且会在一开始调用相同选择器的ajaxStart()函数,注册一个函数异步调用。

  • 相关阅读:
    课后作业03
    课堂测验02
    构建之法阅读笔记02
    进度条 二
    软件工程个人作业02
    Sprint6
    Sprint5
    Alpha版总结会议
    Beta版总结会议
    Alpha阶段项目Postmortem会议总结
  • 原文地址:https://www.cnblogs.com/xinchrome/p/5276606.html
Copyright © 2020-2023  润新知