一、  简介:    

   1 关于jQuery

js库,提供了dom选择、操作、兼容完善的事件机制和Ajax的封装,使之有更为简便和简捷的去开发js程序。JQuery的底层是JavaScript、由于JavaScript操作不太方便、选择器较少、浏览器兼容是个问题、JavaScript原生的Ajax交互比较繁琐。jQuery是JavaScript众多框架之一。

     2  关于JavaScript

     其实JavaScript非常强大, 作为后台开发、我的理解是这样的。JavaScript由三部分组成: ECMAScript、Bom、DOM。ECMAScript是原生的基于对象语言、BOM是浏览器的处理、DOM是一套接口,JavaScript支持,同样DOM同样可以被xml等使用,是一套标准接口而已,不能说就是JavaScript的一部分。jQuery是前端框架、主要运用了DOM和BOM。而ECMAScript相关的框架包括node.js, 这是后台语言。所以很多资料介绍JavaScript说是支持前后台的语言,嗯,的确是这样子的! 

     很多前端学习者在纠结到底先学习JavaScript、还是直接jQuery? 这就像后台学习者问道:跳过servlet、直接学习框架怎么样?  我认为学习应该循序渐进、看完以上介绍,不妨先学习JavaScript。

     接着、我们一起来学习jQuery怎么样(我也不太会)!

     jQuery参考文档:

二、JQuery的使用

    1、前端编辑器

     前端开发工具真不少,下面推荐几款。Visual Studio Code:https://code.visualstudio.com/  、WebStorm、HBuilder; 支持国产、用HBulider吧。

    2、jQuery库

      先要使用jQuery,必须要有库文件才能使用。下载JQuery开发库文件到本地,直接引用(推荐);或者使用在线库文件。

<script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>

通过前面的介绍、我们了解了JQuery和JavaScript、也准备了库和开发工具。到了学习jQuery的时候了,先要说明: 我不是纯正的前端开发者,我只负责介绍总结基本的知识、方便日后继续和深度学习。 

三、JQuery和JavaScript对象

    很多后台人员傻傻分不清JavaScript和jQuery对象, JavaScript对象: var divElement = document.getElementById("a");

jquery对象: var e=$("#a")  ---按照id查询  jQuery的选择器都有一个明显的标志"$"。对象转换.

//1、jQuery对象->JavaScript对象
var $div = $("#divID");//jquery对象(注意这是一个数组,尽管是通过id获取的)
var divElement = $div[0];//js对象(方式一)
var divElement 2= $div.get(0);//js对象(方式二)

//2、JavaScript对象->jQuery对象

var inputElement = document.getElementById("inputID");//js对象

var $input = $(inputElement);//jquery对象

 

四、强大的JQuery选择器

通过选择器,能定位web页面中的任何标签。jQuery有丰富的选择器(9共类)

1、基本选择器

      也就是最常用的id或者class或者标签等选择器,类似JavaScript选择器。

     “#” 代表ID查询、“.”代表class查询、“标签名”代表标签查询。

//1)查找ID为"div1ID"的元素
           $("#div1ID"); //“#” 代表ID查询
           
      //2)查找DIV元素的个数
        $("div").size() ; //div元素查询
          
      //3)查找所有样式是"myClass"的元素
          $(".myClass");  //class查询
      
      //4)查找所有ID为div1ID,CLASS为myClass,P元素的
           $('#div1ID,.myClass,p'); //综合查询

通过基本选择器查询不是可以找所有的元素了吗, 为什么还需要其他选择器? 是的、理论上只要给一个元素ID,都可以定位到元素,那如果我要选择表格中1、3、5行呢? 继续。

2、层次选择器

      父子,兄弟关系的选择器   

      (1)ancestor descendant 在给定的祖先元素下匹配所有的后代元素(子孙)

      (2)parent > child  在给定的父元素下匹配所有的子元素(子)

      (3)prev + next     匹配所有紧接在 prev 元素后的 next 元素

      (4)prev ~ siblings   匹配 prev 元素之后的所有 siblings 元素

<form>
  <label>Name:</label>
  <input name="name" />
  <fieldset>
      <label>Newsletter:</label>
      <input name="newsletter" />
 </fieldset>
</form>
<input name="none" />
$("form input");       // 选择form中所有input子元素(包括孙子)
                       //结果[ <input name="name" />, <input name="newsletter" /> ]
$("form > input");     //选择子元素 [ <input name="name" /> ]

$("label + input") ;    //匹配所有跟在 label 后面的next input 元素 name="name" />, <input name="newsletter" /> ]

$("form ~ input");    //匹配所有跟在 form 后面的所有input 元素[ <input name="none" /> ]

 

  3、加强的基本选择器

     处理前后左右关系的选择器。

  • :first    //获取第一个元素
  • :last   // 获取最后个元素
  • :not(selector) //去除所有与给定选择器匹配的元素
  • :even   //匹配所有索引值为偶数的元素,从 0 开始计数
  • :odd   //匹配所有索引值为奇数的元素,从 0 开始计数
  • :eq(index) //匹配一个给定索引值的元素
  • :gt(index) //匹配所有大于给定索引值的元素
  • :lt(index)  //匹配所有小于给定索引值的元素
  • :header  //匹配如 h1, h2, h3之类的标题元素
  • :animated //匹配所有正在执行动画效果的元素

     

<ul>
    <li>list item 1</li>
    <li>list item 2</li>
    <li>list item 3</li>
    <li>list item 4</li>
    <li>list item 5</li>
</ul>
$('li:first'); //[ <li>list item 1</li> ]
<input name="apple" />
<input name="flower" checked="checked" />
$("input:not(:checked)")

4、内容选择器

  按照内容选择元素。

  • :contains(text) //内容中包含text的元素
  • :empty     //内容为空的元素
  • :has(selector) // 具有selector选择器的元素
  • :parent      //父母节点   
<div>John Resig</div>
<div>George Martin</div>
<div>Malcom John Sinclair</div>
<div>J. Ohn
$("div:contains('John')");//[ <div>John Resig</div>, <div>Malcom John Sinclair</div> ]

 

5、属性选择器

  根据style属性选择元素。

  • [attribute]  //匹配包含给定属性的元素。比如id
  • [attribute=value] //匹配包含给定属性值的元素。 比如 $("input[id='div']");
  • [attribute!=value] //匹配所有不含有指定的属性
  • [attribute^=value] //匹配给定的属性是以某些值开始的元素
  • [attribute$=value] //匹配给定的属性是以某些值结尾的元素
  • [attribute*=value] //匹配给定的属性是以包含某些值的元素

       

<input type="checkbox" name="newsletter" value="Hot Fuzz" />
<input type="checkbox" name="newsletter" value="Cold Fusion" />
<input type="checkbox" name="accept" value="Evil Plans" />
$("input[name='accept']");//<input type="checkbox" name="accept" value="Evil Plans" />
"$(input[name^='newsletter']");//[<input type="checkbox" name="accept" value="Evil Plans" />]

 

这里就介绍以上5种选择器、这样你就知道接着应该怎么学习剩下的 。查看文档“选择器”内容  

好的、恭喜你。你学完了jQuery最常用、很重要的一个部分。

 

五、文档处理-DOM

     对JavaScript-DOM部分的进一步封装,进而对功能增强和简化操作。学会看着文档学习,文章下面实例都是最常见、使用的方法

1、内部插入

   append(content)经常用于ajax中处理数据使用。

<!DOCTYPE html>
<html>
    <head>
        <!--声明当前页面的编码集:charset=gbk,gbk2312(中文编码),utf-8(国际编码)-->
        <meta http-equiv="Content-Type" content="text/html; charset=GBK">
        <title>Jquery-DOM演示</title>
         <!--引入jQuery在线库-->
        <script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
        <!--
            作者:972606984@qq.com
            时间:2018-07-15
            描述:JavaScript代码块-JQueryDOM演示
        -->
        <script type="application/javascript">
            //$(function(){}); 页面初始化
            $(function(){
             var str="<a id='baidu' href='http://www.baidu.com'>百度</a>"
             //内部追加内容
            $("#a").append(str);
            });
        </script>
    </head>
     
    <body>
        <div id='a'>
            <!--<a id="baidu" href='http://www.baidu.com'>百度</a>-->
        </div>
    </body>

</html>

2、外部插入

      方法有这几个、after(content|fn)、before(content|fn)、insertAfter(content)、insertBefore(content)。演示:

<!DOCTYPE html>
<html>
    <head>
        <!--声明当前页面的编码集:charset=gbk,gbk2312(中文编码),utf-8(国际编码)-->
        <meta http-equiv="Content-Type" content="text/html; charset=GBK">
        <title>Jquery-DOM演示</title>
         <!--引入jQuery在线库-->
        <script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
        <!--
            作者:972606984@qq.com
            时间:2018-07-15
            描述:JavaScript代码块-JQueryDOM演示
        -->
        <script type="application/javascript">
            //$(function(){}); 页面初始化
            $(function(){
             var str="<a id='baidu' href='http://www.baidu.com'>百度</a>"
             //1、内部追加内容
            $("#a").append(str);
            //2、外部插入
            var htmlstr="<p>hello 我在你下面</p>";
            var str2="hello 我在你上面!"
            $("#a").after(htmlstr);
            $("#a").before(str2);
            });
            
        </script>
    </head>
     
    <body>
        <div id='a'>
            <!--<a id="baidu" href='http://www.baidu.com'>百度</a>-->
        </div>
    </body>

</html>

 3、删除节点

   删除方法empty():清空指定元素的内容,彻底删除,不能恢复。

   remove([expr]):这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。但是在HTML中不可见。

   detach([expr]):这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。与remove()不同的是,所有绑定的事件、附加的数据等都会保留下来。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
         <!--引入jQuery在线库-->
        <script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
    </head>
    <script type="application/javascript">
        //初始化
        $(function(){
            //清空u1
            $("#u1").empty();
            //删除u2的第一个元素、加强的基本选择器
            $("#u2 li:first-child").remove();
        });
        
    </script>
    <body>
        <ul id="u1">
            <li>live1-1</li>
            <li>live1-2</li>
        </ul>
        <ul id="u2">
            <li id="li1">live2-1</li>
            <li>live2-2</li>
        </ul>
        
    </body>
</html>

该部分剩下的内容还有包裹、替换、复制,不一一测试。到这里、你已经学完了jQuery的选择器和DOM操作。剩下的重点还有:属性操作、CSS操作、事件、AJax(动画方面简单介绍)

六、属性操作

使用最多的有attr(), 特别注意这个方法添加的是HTML标签属性, 如img的src、a标签的href,不能是style属性。removeAttr(),对应的删除属性。addClass()/removeClass() 添加/删除class属性

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
         <!--引入jQuery在线库-->
        <script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
        <script type="application/javascript">
            $(function(){
                //给a标签添加HTML熟悉
                $("#baidu")
                .attr("href","www.baidu.com");
                //$("#baidu").attr("class","baidu");也是一样子的.
                $("#baidu").addClass("baidu");
            });

            
        </script>
    </head>
    
    <body>
        <a id="baidu">baidu</a>
    </body>
</html>

 

七、CSS操作

css() 获取或者添加css属性、height()设置height或者获取height值。width() 获取或者设置width的值。

$('#a').css('fontSize',"14px");// 设置属性    $('#a').css('fontSize') //获取font-size属性。css的大部分方法都是同时具有"获取"和“设置”性质的。

<!DOCTYPE html>
<html>
        <meta charset="UTF-8">
        <title></title>
         <!--引入jQuery在线库-->
        <script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script>
        <script type="application/javascript">
            $(function(){
                //给div添加内容
                $('#dx').text("1234abcd");
                //给div添加color属性
                $('#dx').css("color","chocolate");
                //控制台打印width和heigth、color
                console.info("heigth: "+ $('#dx').height()+"  width: "+$('#dx').width());
                console.info($('#dx').css("fontSize"));//font-size或者fontSize都是可以的
            });

        </script>
        <!--
            描述:引入css片段
        -->
        <style type="text/css">
            #dx{
                background: blueviolet;
                width: 100px;
                height: 200px;
                font-size: 14px;
            }
            
        </style>
    </head>
    
    <body>
        <div id="dx"></div>    
    </body>
</html>

 

  八、JQuery事件

 事件大概可以分为几种。jQuery事件、所有标签都有的事件、标签特定的事件。举例

    (1)ready要在DOM就绪时执行的函数

$(document).ready(function(){
    // 在这里写你的代码...
    });

    (2)bind(type,[data],fn)为每个匹配元素的特定事件绑定事件处理函数。

$("p").bind("click", function(){
  alert( $(this).text() );
    });

   (3)bind()的反向操作,从每一个匹配的元素中删除绑定的事件。

$("p").unbind();//把所有段落的所有事件取消绑定

  九、Ajax交互

       我们都知道ajax用于前后台交互、相比JavaScript原生的ajax操作更加简单。ajax相关的方法有如下。其中$.ajax()最底层、其他函数都是给予它改造。

 

• $.ajax(url,[settings])
• load(url,[data],[callback])
• $.get(url,[data],[fn],[type])
• $.getJSON(url,[data],[fn])
• $.getScript(url,[callback])
• $.post(url,[data],[fn],[type])

    这里来讲解$.ajax()

    API的解释: 通过 HTTP 请求加载远程数据。jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。

关于回调函数

  如果要处理$.ajax()得到的数据,则需要使用回调函数。beforeSend、error、dataFilter、success、complete。

  • beforeSend 在发送请求之前调用,并且传入一个XMLHttpRequest作为参数。
  • error 在请求出错时调用。传入XMLHttpRequest对象,描述错误类型的字符串以及一个异常对象(如果有的话)
  • dataFilter 在请求成功之后调用。传入返回的数据以及"dataType"参数的值。并且必须返回新的数据(可能是处理过的)传递给success回调函数。
  • success 当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。
  • complete 当请求完成之后调用这个函数,无论成功或失败。传入XMLHttpRequest对象,以及一个包含成功或错误代码的字符串。

       数据类型

    通过dataType选项还可以指定其他不同数据处理方式。除了单纯的XML,还可以指定 html、json、jsonp、script或者text。其中JSON数据使用最为广泛。

个人非常喜欢用$.ajax()、他可以实现其他函数的所有功能, 只不过有时操作比较繁琐一点。

    

<form>
   <span class="teach_word">Schools list:</span>
   <select id="region" name="region" onchange="ajax_index_Upload(this.value);">
      <option value="Eastern China" selected>Eastern China</option>
      <option value="Southwestern China">Southwestern China</option>
      <option value="North & NW China">North & NW China</option>
      <option value="Southern & Central">Southern & Central</option>
      <option value="Northeastern China">Northeastern China</option>
      <option value="Others">Others</option>
   </select>
   <select name="provinces" id="provinces" onchange="get_linkage_val()">
      <!--<option value="zhejiang">Anhui</option>-->
   </select>
   <a href="/dede/a/Teach_in_China" style="margin-left:370px;">
      <input class="teach_sub" type="button" value="search">
   </a>
</form>
function ajax_index_Upload( val )
{
   var $region = $( "#region" );
   var $provinces = $( "#provinces" );
   $.ajax( {
      type: "POST",   // 请求类型 Get或者Post二种
      dataType: "json",  //请求数据类型json, 另外也支持jsonp、xml、html
      url: "/dede/templets/default/china_city.php", //请求路径、服务器路径
      data: {
         "region": val           //请求数据、json
      },
      success: function( data ){//数据处理},  //success回调函数
      error: function( XMLHttpRequest, textStatus ) // 异常回调函数
      {
         alert( XMLHttpRequest.status );
         alert( XMLHttpRequest.readyState );
         alert( textStatus );
      }
   } );
}

  

尾声: 本文章介绍了jQuery的大部分重要知识, 应该根据API文档进行细化学习。