Ajax基础知识

1、同步交互和异步交互
同步交互

  • 客户端向服务器端发送请求—>等待服务器端处理—>处理完毕返回,这个期间客户端不能做任何其他事情。
  • 发送方发出数据后,等接收方发回相应以后才发下一个数据包的通讯方式。
    异步交互
  • 客户端向服务器端发送请求—>等待服务器端处理—>处理完毕返回,这个期间客户端可以做其他事情。
  • 发送方发出数据后,不等接收方发回相应,接着发送下个数据包的通讯方式。

2、Ajax的定义

  • Ajax被认为是(Asynchronous Javascript and XML的缩写)
  • 允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax。

3、Ajax模型与传统web模型的区别
Ajax模型

  • 客户端浏览器向服务器发送请求,请求的是数据。
  • 服务器向客户端浏览器相应的是数据。
  • 在ajax模型中,客户端浏览器与服务器通信,传递的是数据。
    传统web模型
  • 客户端浏览器向服务器发送请求,请求的是整个页面
  • 服务器相应客户端浏览器的是整个页面
  • 在传统的web模型中,客户端浏览器与服务器通信,传递的是整个页面。

4、实现异步交互的技术

  • Flash
  • Java applet
  • 框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面。
  • 隐藏的iframe
  • XMLHttpRequest:该对象是对JavaScript的一个扩展,可使网页与服务器进行通信。是创建Ajax应用的最佳选择。实际上通常把Ajax当成XMLHttpRequest对象的代名词。

5、Ajax的工作原理

  • Ajax的核心是JavaScript对象XmlHttpRequest
  • XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理相应,而不阻塞用户。
  • 用户的浏览器在执行任务时即装载了Ajax引擎。Ajax引擎用JavaScript语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。
  • Ajax引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器间的交流。现在,可以用JavaScript调用Ajax引擎来代替产生一个Http的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给Ajax来执行。

6、Ajax包含的技术
AJAX(Asynchronous JavaScript and XML)并不是一项新技术,其实是多种技术的综合,包括JavaScript、XHTML和CSS、DOM、XML和XMLHttpRequest。

  • 服务器端语言:服务器需要具备向浏览器发送特定信息的能力。Ajax与服务器端语言无关。
  • XML是一种描述数据的格式。Ajax程序需要某种格式化的格式来在服务器和客户端之间传递信息,XML是其中一种选择。
  • XHTML和CSS标准化呈现。
  • DOM实现动态显示和交互。
  • 使用XMLHTTP组建XMLHttpRequest对象进行异步数据读取。
  • 使用JavaScript绑定和处理所有数据。

7、Ajax的优点与缺点
优点:

  • 最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。
  • 使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。
  • 可以把以前一些服务器负担的工作转嫁给客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。
  • 基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。
    缺点:
  • AJAX大量使用了Javascript和AJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0、NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。
  • AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。
  • 对流媒体的支持没有FLASH、Java Applet好。
  • 对搜索引擎的支持比较弱。
  • 一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax。

8、XMLHttpRequest对象
<1>XMLHttpRequest是XMLHTTP组件的对象,通过这个对象,AJAX可以像桌面应用程序一样只同服务器进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又加快了响应速度、缩短了用户等待的时间。
<2>XMLHttpRequest最早是在IE5中以ActiveX组件的形式实现的。非W3C标准!由于非标准所以实现方法不统一。
Internet Explorer把XMLHttpRequest实现为一个ActiveX对象。
其他浏览器(Firefox、Safari、Opera…)把它实现为一个本地的JavaScript对象。
<3>XMLHttpRequest在不同浏览器上的实现是兼容的,所以可以用同样的方式访问XMLHttpRequest实例的属性和方法,而不论这个实例创建的方法是什么。
<4>创建XMLHttpRequest对象

<5>XMLHttpReqeust对象的方法
abort() 停止当前请求。
getAllResponseHeaders() 把http请求的所有响应首部作为键/值对返回。
getResponseHeader(“headerLabel”) 返回指定首部的串值。
open(“method”,“url”) 建立对服务器的调用,method参数可以是GET、POST。url参数可以是相对URL或绝对URL。这个方法还包括3个可选参数。
send(content) 向服务器发送请求。
setReqeustHeader(“label”,“value”) 把指定首部设置为所提供的值。在设置任何首部之前必须先调用open()。
<6>XMLHttpRequest对象的属性
onreadystatechange 状态改变的事件触发器
readyState 对象状态(interger):
0 = 未初始化
1 = 读取中
2 = 已读取
3 = 交互中
4 = 完成
responseText 服务器进程返回数据的文本版本。
responseXML 服务器进程返回数据的兼容DOM的XML文档对象。
status 服务器返回的状态码,如:404 = “文件未找到”、200 = “成功”。
statusText 服务器返回的状态文本信息。
2 Ajax的实现步骤
<1>创建XMLHttpReqeust对象
<2>服务器端向客户端相应(注册监听)

  • XMLHttpRequest对象的onreadystatechange属性
    该事件处理函数由服务器触发,而不是用户。
    在 Ajax 执行过程中,服务器会通知客户端当前的通信状态。这依靠更新XMLHttpRequest对象的readyState来实现。改变readyState属性是服务器对客户端连接操作的一种方式。
    每次readyState属性的改变都会触发readystatechange事件。

  • XMLHttpRequest对象的readyState 属性
    readyState 属性表示Ajax请求的当前状态,它的值用数字代表。
    0 代表未初始化。 还没有调用 open 方法
    1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
    2 代表已加载完毕。send 已被调用。请求已经开始
    3 代表交互中。服务器正在发送响应
    4 代表完成。响应发送完毕

  • 每次readyState值的改变,都会触发readystatechange事件。如果把onreadystatechange事件处理函数赋给一个函数,那么每次readyState值的改变都会引发该函数的执行。
    readyState 值的变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把readyState的值统一设为 4。

  • XMLHttpRequest对象的status属性
    服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。
    常用状态码及其含义:
    404 没找到页面(not found)
    403 禁止访问(forbidden)
    500 内部服务器出错(internal service error)
    200 一切正常(ok)
    304 没有被修改(not modified)(服务器返回304状态,表示源文件没有被修改)
    在XMLHttpRequest对象中,服务器发送的状态码都保存在status属性里。通过把这个值和200或304比较,可以确保服务器是否已发送了一个成功的响应。
    <3>建立客户端与服务器端的通信连接

    • XMLHttpRequest对象的open ( method, url, asynch ) 方法
      XMLHttpRequest 对象的 open 方法允许程序员用一个Ajax调用向服务器发送请求。
      method:请求类型,类似 “GET”或”POST”的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用GET(可以在GET请求里通过附加在URL上的查询字符串来发送数据,不过数据大小限制为2000个字符)。若需要向服务器发送数据,用POST。
      url:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。
      asynch:表示请求是否要异步传输,默认值为true(异步)。指定true,在读取后面的脚本之前,不需要等待服务器的相应。指定false,当脚本处理过程经过这点时,会停下来,一直等到Ajax请求执行完毕再继续执行。
    • 如果请求方式是”POST”方式的话,需要再open( )方法后,调用setRequestHeader(header,value)方法
      当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是 GET 还是 POST。
      Ajax请求中,发送首部信息的工作可以由 setRequestHeader完成。
      参数header: 首部的名字; 参数value:首部的值。
      如果用 POST 请求向服务器发送数据,需要将“Content-type”的首部设置为“application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经符合URL编码了。
      该方法必须在open()之后才能调用。
      <4>客户端向服务器端发送请求
    • XMLHttpRequest对象的send(data)方法
      如果请求方式是”GET”方式的话,send( )方法发送请求数据,服务器端接受不到参数。
      如果请求方式是”POST”方式的话,send ( ) 方法发送请求数据,服务器端可以接受参数。

    TestServlet.java
    public class TestServlet extends HttpServlet {

     public void doGet(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
          response.setContentType( "text/html" );
          PrintWriter out = response.getWriter();
          
          System. out .println("connection server success" );
          
          System. out .println(request.getParameter("a" ));
          System. out .println(request.getParameter("b" ));
          System. out .println(request.getParameter("c" ));
          
          out. println( "get connection server successful!");
    }
    
     public void doPost(HttpServletRequest request, HttpServletResponse response)
                 throws ServletException, IOException {
          doGet(request, response);
    }
    

}

web.xml

<? xml version ="1.0" encoding ="UTF-8" ?>

< web-app version =“2.5”
xmlns =“http://java.sun.com/xml/ns/javaee”
xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation =“http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” >

This is the description of my J2EE component</ description>
This is the display name of my J2EE component</ display-name>
TestServlet</ servlet-name >
app.servlet.TestServlet</ servlet-class >

TestServlet /testServlet index.jsp

test.js
function createXmlHttpRequest(){
var xmlHttp;
try{ //Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e){
try{ //Internet Explorer
xmlHttp=new ActiveXObject(“Msxml2.XMLHTTP”);
}catch (e){
try{
xmlHttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}catch (e){}
}
}
return xmlHttp;
}

window.onload = function(){
document.getElementById(“ok”).onclick = function(){
//1.创建XMLHttpRequest对象
var xhr = createXmlHttpRequest();
/**
* 2.建立客户端与服务器端的连接
*/
xhr.open(“POST”,“testServlet?timeStamp=” + new Date().getTime() + “&c=9”,true);
//xhr.open(“GET”,“testServlet?timeStamp=” + new Date().getTime() + “&c=9”,true);
//3.客户端向服务器端发送请求数据
//send()如果请求类型是GET方式的话,客户端发送请求数据,服务器端接收不到
//get方式的时候相当于xhr.send(null);
//xhr.send(“a=7&b=8”);
//不过可以通过在xhr.open的servlet路径后面加参数发送数据
//xhr.open(“GET”,“…/testServlet?timeStamp=” + new Date().getTime() + “&c=9”,true);
//这里之所以加上时间参数是为了防止缓存
//如果请求类型是POST方式的话,需要设置请求首部信息
xhr.setRequestHeader(“Content-Type”,“application/x-www-form-urlencoded”);
xhr.send(“a=7&b=8”);
//4.服务器端向客户端进行响应
xhr.onreadystatechange = function(){
//alert(xhr.readyState);
//由于被触发了多次,所以上面会打印多次
if(xhr.readyState4){
//响应发送回来之后,还要根据Status确定有没有成功
if(xhr.status
200){
var data = xhr.responseText;
alert(data);
}
}
}
}
};

index.jsp
<%@ page language =“java” import=“java.util.*” pageEncoding=“UTF-8” %>

My JSP 'index.jsp' starting page

执行结果:

Demo1

RegisterServlet.java
public class RegisterServlet extends HttpServlet {

   public void doPost(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

        response.setContentType( "text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        
        String username = request.getParameter( "username");
        
        System. out.println("username = " +username);
        
         //查询数据库表
         if(username==null||"".equals(username)){
              out.println( "请输入你的用户名!" );
        } else if (username.equals("sa")){
              out.println( "该用户名已存在!" );
        } else{
              out.println( "该用户名可以使用!" );
        }
        
  }

}

register.jsp
<%@ page language =“java” pageEncoding=“utf-8” %>

校验用户名是否存在

请填写用户注册信息

用户名:< input type="text" name ="username" value="" id="username" >
密码:< input type="password" name ="psw" value="" >
确认密码:< input type="password" name ="confpsw" value="" >
出生日期:< input type="text" name ="birthday" value="" >

register.jsp
window.onload = function(){
document.getElementById(“checkusername”).onclick = function(){
var username = document.getElementById(“username”).value;

      var xhr = createXmlHttpRequest();
     
      xhr.onreadystatechange = function(){
           if(xhr.readyState==4){
                if(xhr.status==200){
                     var data = xhr.responseText;
                    
                     document.getElementById("divcheck").innerHTML = data;
                }
           }
      }
      //这里之所以要写上../,是因为此js是在一个webroot下的一个包内
      xhr.open("POST","../registerServlet",true);
     
      xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
     
      xhr.send("username="+username);
 }

}
function createXmlHttpRequest(){
var xmlHttp;
try{ //Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}catch (e){
try{ //Internet Explorer
xmlHttp=new ActiveXObject(“Msxml2.XMLHTTP”);
}catch (e){
try{
xmlHttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}catch (e){}
}
}
return xmlHttp;
}

Demo2

xmlFile.jsp
<%@ page language =“java” pageEncoding=“utf-8” %>

级联菜单 请选择.... 请选择.....

xmlFile.js
window.onload = function(){
var xhr = createXmlHttpRequest();

 xhr.onreadystatechange = function(){
      if(xhr.readyState==4){
           if(xhr.status==200){
                var docXml = xhr.responseXML;
               
                var provinceXmlElements = docXml.getElementsByTagName("province");
               
                var provinceElement = document.getElementById("province");
               
                for(var i=0;i<provinceXmlElements.length;i++){
                     var provinceXmlElement = provinceXmlElements[i];
                    
                     var provinceXmlValue = provinceXmlElement.getAttribute("name");
                    
                     var optionElement = document.createElement("option");
                     optionElement.setAttribute("value",provinceXmlValue);
                     var text = document.createTextNode(provinceXmlValue);
                     optionElement.appendChild(text);
                    
                     provinceElement.appendChild(optionElement);
                }
               
                provinceElement.onchange = function(){
                     var cityElement = document.getElementById("city");
                     var optionElements = cityElement.getElementsByTagName("option");
                     for(var z=1;z<optionElements.length;z++){
                          cityElement.removeChild(optionElements[1]);
                          z--;
                     }
                    
                     var provinceValue = this.value;
                    
                     for(var i=0;i<provinceXmlElements.length;i++){
                          var provinceXmlElement = provinceXmlElements[i];
                         
                          var provinceXmlValue = provinceXmlElement.getAttribute("name");
                         
                          if(provinceValue==provinceXmlValue){
                               var cityXmlElements = provinceXmlElement.getElementsByTagName("city");
                              
                               for(var j=0;j<cityXmlElements.length;j++){
                                    var cityXmlElement = cityXmlElements[j];
                                   
                                    var cityXmlValue = cityXmlElement.text;
                                   
                                    var optionElement = document.createElement("option");
                                    optionElement.setAttribute("value",cityXmlValue);
                                    var text = document.createTextNode(cityXmlValue);
                                    optionElement.appendChild(text);
                                   
                                    cityElement.appendChild(optionElement);
                                   
                               }
                              
                          }
                     }
                    
                }
           }
      }
 }

 xhr.open("get","../xmlServlet",true);

 xhr.send(null);

}

 function createXmlHttpRequest(){
      var xmlHttp;
      try{    //Firefox, Opera 8.0+, Safari
           xmlHttp=new XMLHttpRequest();
      }catch (e){
           try{    //Internet Explorer
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
           }catch (e){
                try{
                     xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }catch (e){} 
           }
      }
      return xmlHttp;
 }

XmlServlet.java
public class XmlServlet extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
               throws ServletException, IOException {

         //如果响应数据格式是xml,设置响应首部信息"Content-Type"为"text/xml"
        response.setContentType( "text/xml;charset=utf-8");
        PrintWriter out = response. getWriter();
        
        out.println( "<china>");
        out.println( "<province name='吉林省'>" );
        out.println( "<city>长春</city>" );
        out.println( "<city>吉林市</city>" );
        out.println( "<city>四平</city>" );
        out.println( "<city>松原</city>" );
        out.println( "<city>通化</city>" );
        out.println( "</province>");
        
        out.println( "<province name='辽宁省'>" );
        out.println( "<city>沈阳</city>" );
        out.println( "<city>大连</city>" );
        out.println( "<city>鞍山</city>" );
        out.println( "<city>抚顺</city>" );
        out.println( "<city>铁岭</city>" );
        out.println( "</province>");
        
        out.println( "<province name='山东省'>" );
        out.println( "<city>济南</city>" );
        out.println( "<city>青岛</city>" );
        out.println( "<city>威海</city>" );
        out.println( "<city>烟台</city>" );
        out.println( "<city>潍坊</city>" );
        out.println( "</province>");
        out.println( "</china>");
  }

}
3 Ajax的数据格式
<1>HTML

  • XMLHttpRequest对象的responseText属性
    responseText属性包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。

当readyState属性值变成4时,responseText属性才可用,表明Ajax请求已经结束。

  • 优点:

从服务器端发送的HTML代码在浏览器端不需要用JavaScript进行解析。

HTML 的可读性好。

HTML 代码块与innerHTML属性搭配,效率高。

  • 缺点:

若需要通过 AJAX 更新一篇文档的多个部分,HTML不合适(拆串)。

innerHTML并非DOM标准。

<2>XML

  • XMLHttpRequest对象的responseXML属性
    只用服务器发送了带有正确首部信息的数据时,responseXML属性才是可用的。MIME类型必须为text/xml。
  • 优点:

XML是一种通用的数据格式。

不必把数据强加到已定义好的格式中,而是要为数据自定义合适的标记。

利用 DOM 可以完全掌控文档。

  • 缺点:

如果文档来自于服务器,就必须得保证文档含有正确的首部信息。若文档类型不正确,那么responseXML的值将是空的。

   当浏览器接收到长的XML文件后,DOM解析可能会很复杂。

4 xstrem
1、xstream可以完成javaBean对象与xml格式的转换
<1>导入xpp3_min-1.1.4c.jar、xstream-1.4.4.jar
<2>写bean类
<3>转化为xml类型并且打印出来

City.xml
public class City {
private Integer id ;
private String name ;

   public City(Integer id,String name){
         this.id = id;
         this.name = name;
  }

   public Integer getId() {
         return id ;
  }

   public void setId(Integer id) {
         this.id = id;
  }

   public String getName() {
         return name ;
  }

   public void setName(String name) {
         this.name = name;
  }

}

Province.xml
public class Province {

   private Integer id ;
   private String name ;
   private List<City> cities ;
  
   public Province(Integer id, String name, List<City> cities) {
         this.id = id;
         this.name = name;
         this.cities = cities;
  }
   public Integer getId() {
         return id ;
  }
   public void setId(Integer id) {
         this.id = id;
  }
   public String getName() {
         return name ;
  }
   public void setName(String name) {
         this.name = name;
  }
   public List<City> getCities() {
         return cities ;
  }
   public void setCities(List<City> cities) {
         this.cities = cities;
  }

}

Test.java
public class Test {
public static void main(String[] args){
List cities = new ArrayList();
City city1 = new City(1,“长春” );
City city2 = new City(2,“吉林” );
City city3 = new City(3,“四平” );
City city4 = new City(4,“通化” );
cities.add(city1);
cities.add(city2);
cities.add(city3);
cities.add(city4);

        List< Province> provinces = new ArrayList< Province>();
         Province p1 = new Province (1,"吉林省" ,cities);
        provinces.add(p1);
        
        XStream xstream = new XStream();
        xstream.alias( "province", Province. class);
        xstream.alias( "city", City.class);
        
        xstream.useAttributeFor(Province. class,"id" );
        xstream.useAttributeFor( Province.class, "name");
        
        String xml = xstream.toXML(p1);
        System. out.println(xml);
  }

}

注:利用Person newJoe = (Person)xstream.fromXML(xml)方法可以将XML数据转化为javabean对象。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Ajax笔记
核心内容概述
1.JavaScript加强,涉及到ECMAScript语法、BOM对象、DOM对象以及事件。
2.Ajax传统编程。
3.jQuery框架,九种选择器为核心学习内容
4.JQuery UI插件
5.jQuery Ajax编程
6.jQuery第三方插件
7.反向Ajax编程(彗星)
一、JavaScript基础加强
JavaScript是在浏览器内容运行,无需编译、解释执行动态脚本语言,是一种弱类型语言,所有变量使用var定义。
JavaScript的3个组成部分分别为:核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)
1.ECMAScript核心语法
①:代码编写位置
分为内部JS和外部JS【使用src进行引入】

JavaScript程序编写 ②:学习顺序 JavaScript依次从变量(标示符、关键字),运算符,程序结构(if while for),以及函数来进行学习。 (1)所有的变量使用var来定义,是弱类型变量,不代表没有类型,变量本身还是有类型的。【var a=10,var b=1.5;他们分别为整数以及浮点数类型】 (2)每行结尾分号可有可无,建议编写。 (3)注释和Java类似,支持单行注释(//)和多行注释(/* */) ③:数据类型 JavaScript分为原始数据类型和引用数据类型,分别存储于栈和堆中。 原始数据类型:number、string、boolean、null和undefined 引用数据类型:存在很多种,每种都是object对象 可以使用typeof查看数据类型,使用instanceof判断变量数据类型 Demo:

alert(typeof d);
// 通过instanceof判断变量数据类型
alert(d instanceof Object);//falae
alert(a instanceof Object);//falae

var s = new String("abc"); // 对象类型
alert(s instanceof Object);
④:null和undefined的区分 null:对象不存在; undefined:对象存在,访问属性或者方法不存在(对象未初始化) 2.ECMAScript对象 ECMAScript常用的有7个对象,依次为String、Number、Boolean、Math、Date、Array以及Regxp。 ①:String类型常用属性方法 建议查看手册,这里需要注意的为length属性以及match方法 charAt()、concat()、indexOf()、lastIndexOf()、match()、replace()、split()、substr()、substring()、toLowerCase()、toUpperCase() Java中提供matches方法 例如:"1234".matches("\\d+") ---- 返回true JavaScript 与 matches方法等价的那个方法,是 RegExp 对象提供test方法 例如:/^\d+$/.test("1234") --- 返回true /^\d+$/ 等价于 new RegExp("^\\d+$") "1234".match("^\\d+$") 返回是匹配正则表达式内容,而不是布尔值,等价于 /^\d+$/.exec("1234") ②:Math常用属性和方法 PI 属性 round(x) 把数四舍五入为最接近的整数 random() 返回 0 ~ 1 之间的随机数 pow(x,y) 次幂 sqrt(x) 平方根 ③:Date常用属性和方法 toLocaleString() 返回当地本地化日期格式 2012年12月12日 11:07:52 getTime() 返回从1970年1月1日到目前为止 毫秒值 Demo:

// alert(“98”==98);// true
// alert("true"true); // false
// alert(1
true); // true

var d = 010;// 八进制
var d2 = 0x10; // 十六进制
		
// match方法 类似 Java中 matches,有区别

// alert(/^\d+KaTeX parse error: Got function '\newline' with no arguments as superscript at position 1: \̲n̲e̲w̲l̲i̲n̲e̲")); // math方法返回的是匹配正则表达式内容,而不是布尔值
// alert(/^\d+$/.exec(“1234abc1234”));// 返回匹配的内容

// Date使用
var date = new Date(); //当前日期
alert(date.toLocaleString());// 返回当地国际化日期格式
var dateStr = date.getFullYear()+"-"+date.getMonth()

+“-”+date.getDate()+" “+date.getHours()+”:“+date.getMinutes()
+”:"+date.getSeconds();
alert(dateStr);

④:Array常用属性方法
push() 加入元素到数组
pop() 从数组移除最后一个元素
reverse()反转
join() 连接数组元素 通过特定内容 返回字符串
sort() 排序
slice() 截取数组中指定元素 从start到end
Demo:

3.ECMAScript核心语法——函数
①:函数定义的三种方式
注意:第二种方式使用越来越多,第三种不常用,第一种常用

②:JavaScript全局函数(内置函数)
一组与编码解码相关的函数
encodeURI()&decodeURI()
encodeURIComponent()&decodeURIComponent()
escape()&unescape()
此块具体内容请参照W3C文档查看。
4.ECMAScript核心——JavaScript面向对象编程
Java是面向对象,写Java程序,写类和对象。JavaScript是基于对象,写Js,不用创建类,使用Js内部已经定义好的对象。
①:定义JavaScript对象的两种方式
方式一:使用已经存在的对象,通过关键字进行创建
var s = new String(“aaaa”);
var o = new Object();
var date = new Date();
// alert(date instanceof Object);// true

// JS对象 类似一个map结构
var arr = new Array(3);
arr[0] = 100;// 使用数组下标 为数组元素赋值
arr['aaa'] = 1000; // 定义对象属性

// alert(arr[‘aaa’]);
arr.showInfo = function(){// 定义对象方法
alert(arr.join(“,”));
};
// arr.showInfo(); //100, ,
Js其实就是一个类似map结构,key为属性名和方法名,value为属性值和方法定义

方式二:通过{}创建
var obj = {
name : ‘张三’,
age : 20,
getName : function(){
// 访问对象属性 通过关键字 this
return this.name;
}
};
// 访问对象 属性 [] 和 .
// alert(obj.name);
// alert(obj[“age”]);
alert(obj.getName());

// 添加一个方法到 obj对象
obj.getAge = function(){
	return this.age;
}

alert(obj.getAge());

JavaScript中的对象是通过 new function创建的,在Js中function等同于一个类结构
// 定义类 结构
var Product = function(name,price){
this.name = name; // 保存name的值 到对象属性中
this.price = price;
}
// 基于类结构创建对象,使用new 关键字
var p1 = new Product(“冰箱”,1000);
var p2 = new Product(“洗衣机”,1500);

// alert(p1.name);
// alert(p1.price);
function本身代表一个函数,JavaScript对象通过new function来获得的,理解function就是对象构造函数
②:Object和function的关系
JavaScript中所有引用类型都是对象Object实例 ------- Function instanceOf Object //true
JavaScript 中所有对象都是通过 new Function实例(function) 获得 ------ Object instance Function //true
JavaScript所有对象构造函数都是function实例;JavaScript所有对象都是object实例,function也是object实例。

使用JavaScript的传递性进行推论!
A:function是用来定义一个函数,所有函数实例都是Function对象
B:JavaScript中,所有对象都是通过new function得到的
Var Object = function(){…}
Var String = function(){…}
Var Array = function(){…}
Var Date = function(){…}
结论:所有对象构造器都是Function实例
alert(String instanceOf Function) //true
alert(Object instanceOf Function) //true
C:创建一个对象,需要使用new function
Var s = new String()
Var o = new Object()
Var arr = new Array()
Var date = new Date()
结论:JavaScript中,一切对象都是object实例
alert(s instanceOf Object) //true
alert(Function instanceOf Object) //true

var f = new Function(); // 实例化Function对象
var o = new Object(); // 实例化Object对象
alert(f instanceof Function); // true
alert(f instanceof Object); // true
alert(o instanceof Function); // false
alert(o instanceof Object); // true
③:function原型属性
JavaScript所有对象都由function构造函数得来的 ,通过修改 function构造函数 prototype属性,动态修改对象属性和方法。

④:继承
A:使用原型链完成JavaScript单继承
var A = function(){
this.name = ‘xxx’;
}
var B = function(){
this.age = 20;
}
// 方式一 可以通过 prototype原型完成单继承 B的原型指向A
B.prototype = new A(); // 从A实例中,继承所有属性

var b = new B();
alert(b.name);
		
//  练习:通过prototype为String类添加一个trim方法
String.prototype.trim = function(){
	return this.replace(/(^\s*)(\s*$)/g, "");

}
B:对象冒充完成多继承
var C = function(){
this.info = ‘c’;
}
var D = function(){
this.msg = ‘d’;
}
var E = function(){
// 同时继承C和D
this.methodC = C;
this.methodC();
delete this.methodC;

	this.methodD = D;
	this.methodD();
	delete this.methodD;
			
	this.desc = 'e';
}
		
var e = new E();

// alert(e.info);
// alert(e.msg);
// alert(e.desc);
⑤:动态方法调用
可以改变this的指向,可以完成对象多继承
// 定义函数
function printInfo(){
alert(this.name);
}

// 属性name 值 张三
var o = {name: '张三'};

// o.printInfo();// 函数不属于对象o
// JS提供动态方法调用两个方法,允许一个对象调用不是属于它自己的方法(call apply)
// printInfo.call(o);
// printInfo.apply(o);

function add(a,b){
	this.sum = a+b;
}
// call传 多个参数

// add.call(o,8,10);
// apply 传递参数数组
add.apply(o,new Array(8,10));
// alert(o.sum);

// 动态方法调用 ,实现多重继承,原理就是对象冒充
var A = function(){
	this.info = 'a';
}
var B = function(){
	// 动态方法调用继承
	A.call(this);
}
var b = new B();
alert(b.info);

二、JavaScript浏览器对象BOM
DOM Window 代表窗体
DOM History 历史记录
DOM Location 浏览器导航
DOM Navigator 浏览器信息 不讲
DOM Screen 屏幕 不讲
重点:window、history、location ,最重要的是window对象
1.window对象
Window 对象表示浏览器中打开的窗口,如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象
window.frames 返回窗口中所有命名的框架
parent是父窗口(如果窗口是顶级窗口,那么parentselftop)
top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe)
self是当前窗口(等价window)
opener是用open方法打开当前窗口的那个窗口
①:父子窗体之间的通讯
在页面内嵌入一个iframe,在iframe中提供一个输入项,输入后,在iframe外面窗口中显示内容

显示结果如上图所示,实现思路如下:
子窗体:2.html

Untitled Document

主窗体

②:window的open close

打开关闭窗体

④:定时操作setInterval & setTimeout
setInterval:定时任务会重复执行
setTimeout:定时任务只执行一次
在页面动态显示当前时间

2.history 对象 代表历史记录,常用来制作页面中返回按钮 3.Location 对象 代表浏览器导航 在js函数中发起href链接效果 location.href='跳转后url' ; 等价于 三、JavaScript文档对象模型DOM History和Location使用 DOM 解析模型,将文档加载到 内存,形成一个树形结构 就是根节点,每个标签会成为一个元素节点、标签的属性成为属性节点,标签内部的文本内容成为文本节点 注意:属性节点,它不属于DOM树形结构,不属于任何节点父节点,也不属于任何节点的子节点 ,属性节点依附于元素节点上 一种附加节点 【上面代码 产生6个元素节点,5个属性节点,9个文本节点】 HTML 本身也是 XML,所有可以使用XML DOM API规范 DOM Element DOM Attr DOM Text DOM Document HTML DOM是对XML DOM的扩展, HTML DOM比XML DOM 开发JS来说更加简单方便! HTML DOM最优秀的地方是,操作form对象和table数据 1.BOM和HTML DOM关系图

学习DOM 编程,从Document对象开始,document代表当前HTML网页文档对象,是window对象一个属性,可以直接使用 ,所有HTML DOM对象都是Document子对象
2.DOM编程开发
window.document 代表整个HTML文档
①:通过document获得Node节点对象
document.forms 获得页面中所有form元素集合
document.body 访问页面中 元素
document.cookie 用JS操作网页cookie信息
全局检索提供了三个重要的方法:
document.getElementById():通过id属性检索,获得Node节点(Element元素)
document.getElementsByName 通过name 属性检索 ,获得NodeList
document.getElementsByTagName 通过标签元素名称 获得NodeList
其中NodeList可以作为数组进行操作
Demo:在每一个h1标签后追加itcast

AAA

BBB

CCC

DDD

②:获得node后 如果node是元素,去里面文本内容 innerHTML (HTML页面内所有元素,一定是HTML 元素,innerHTML 是所有HTML元素通用属性 ) XML 取得一个元素内部文本内容 element.firstChild.nodeValue(看批注32) ③:通过节点Node相对位置关系访问元素 childNodes firstChild lastChild nextSibling parentNode previousSibling 用2种方式打印——明天休息

明天休息


var h1 = document.getElementById("h1"); alert(h1.innerHTML);//方式一 alert(h1.firstChild.nodeValue);//方式二 3.DOM元素常见操作 DOM 获取节点:节点查询 参上 DOM 改变节点: 元素属性修改setAttribute(name,value) 内部文本元素的修改 innerHTML DOM 删除节点:removeChild 删除子元素 、removeAttribute(name)删除节点指定属性 * 要删除节点o o.parentNode.removeChild(o) DOM 替换节点:replaceChild:父节点.replaceChild(新节点,被替换节点) ; 如果对于一个已经存在节点,执行 appendChild、 replaceChild都会造成该节点一个移动效果,可以采取先克隆再复制来消除此效果。 DOM 创建节点:document对象提供createElement() 创建元素、createAttribute(name) 创建属性、createTextNode() 创建文本节点 DOM 添加节点 appendChild 父元素.appendChild(新的子节点) ; insertBefore 父节点.insertBefore(新子节点, 已经存在子节点) DOM 克隆节点 源节点.cloneNode(true); 该方法可以返回一个节点的克隆节点, 克隆节点包含原节点的属性和子元素 此节内容有大量的练习,建议大家做写,增强代码的熟练度。

四、JavaScript事件
事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行。事件是基于对象存在,事件通常可以修饰多种对象。
1.为对象添加事件的2种方式
①:在HTML元素中添加对象的事件

事件 请输入用户名:

5.键盘事件
使用场景:没有提交按钮,我们一般采用回车进行提交
Demo:

发送消息 IE 中window对象,提供event属性,所以在IE中可以直接使用 event对象 火狐没有全局event对象,必须在发生事件时,产生一个event对象 ,传递默认方法 6.form的提交、重置事件 submit/reset onsubmit = "return validateForm" 对表单进行校验 7.改变事件 onchange 制作select联动效果 ---- 省市联动 重点 : onclick 、onchange 、onblur、 onsubmit 8.默认事件的阻止和传播阻止 使用场景极为常见,超链接用户点击后,取消了不发生跳转。

默认事件

这是一个链接

事件传播

HTML DOM Event对象 提供preventDefault()用于阻止默认事件的发生, 该方法IE 不支持 ,在IE中使用 returnValue 提供stopPropagation()用与阻止事件传播,该方法IE不支持,在IE中 cancelBubble 五、Ajax编程入门 1.web交互的2种模式对比 ①:2种交互模式的流程

②:2种交互模式用户体验
同步交互模式:客户端提交请求,等待,在响应回到客户端前,客户端无法进行其他操作
异步交互模型:客户端将请求提交给Ajax引擎,客户端可以继续操作,由Ajax引擎来完成与服务武器端通信,当响应回来后,Ajax引擎会更新客户页面,在客户端提交请求后,用户可以继续操作,而无需等待 。
2.Ajax快速入门
①:开发步骤
1).创建XMLHttpRequest对象
2).将状态触发器绑定到一个函数
3).使用open方法建立与服务器的连接
4).向服务器端发送数据
5).在回调函数中对返回数据进行处理
Demo:

②:XMLHttpRequest对象的属性及方法
属性:
1)onreadystateonchange:状态回调函数
2)readystate:对象状态
3)status:服务器返回的http状态码
4)reqsponseText/responseXML:服务器响应的字符串
5)statusText:服务器返回的http状态信息
方法:
1)open:
2)send:
③:客户端向服务器提交数据
1)get方式发送数据
xmlHttp.open(“GET”,“url?key=value”); // 参数已经在url上
xmlHttp.send(null);
2)post方式发送数据
xmlHttp.open(“POST”,“url”); // 不需要写参数
xmlHttp.setRequestHeader(“CONTENT-TYPE”,“application/x-www-form-urlencoded”); // post发送参数前,需要设置编码格式
xmlHttp.send(“name=xxx&pwd=xxx”); // 发送post数据
④:Ajax编程图解
说明:查看时,请将文档放到为180%较为合适!

结合编程图解,我们将第一个案例的代码进行解剖:

3.三种不同服务器响应数据类型编程
常见的服务器响应数据类型:html片段、JSON格式数据、xml格式数据
①:HTML片段的数据处理
练习1:验证用户名是否有效
 通过xmlhttp.responseText获得返回数据
 通过Dom查找获得元素
 调用元素的innerHTML进行操作

说明:三个文件的具体内容请双击方框内的图标即可查看,这里推荐使用Notepad++进行关联
效果图展示:(数据使用list存储,abc和def存在)

注意:在register.html文件中,与服务器建立连接是,url一定要写对,否则返回数据时出现404错误!【“/Ajax/CheckUsernameServlet?username=”】
②:JSON格式数据处理
练习2:通过链接获得table数据,显示 — 返回HTML片段

通过product.jsp 生成HTML片段,返回客户端,客户端Ajax引擎接收,通过innerHTML 将table元素嵌入到页面内部,其思路与案例一类似,这里不做详细介绍。这里需要提出的是第二种解决方案JSON(HTML片段容易造成返回数据带回过多冗余的HTML标签元素)
JSON是一种JavaScript轻量级数据交互格式,主要应用于Ajax编程。易于人阅读和编写,同时也易于机器解析和生成。
格式一: {key:value,key:value,key:value } 键值对直接用 , 分开,键值之间用 : 键本身必须是字符串常量
{name : ‘张三’}
{‘name’:‘张三’}
是等价的。
值加不加引号,是有区别的,不加引号是变量,加引号是常量字符串
格式二: [值1, 值2 ,值3 ] 数组结构
组合后复杂格式
[{name:‘aaa’}, {name:‘bbb’}, {name:ccc}] 表示三个对象数组
JSON应用场景: AJAX请求参数和响应数据
问题: 服务器端如何生成 json格式数据------->>依赖第三方开源类库
③:JSON-lib的使用
是java类库 ,支持javabean map list array转换json格式字符串, 支持将json字符串转换javabean对象(反过来只支持这一种,使用很少)
在使用JSON-lib时必须导入至少5个jar包

开发时我们使用6个jar包,双击json-lib-all.zip即可获取所需jar包。
1)将数组/list集合解析成JSON串
使用JSONArray可以解析Array类型
JSONArray jsonArray = JSONArray.fromObject(list变量);

2)将Javabean/Map解析成JSON串
使用JSONObject可以解析javabean类型
JSONObject jsonObject = JSONObject.fromObject(javabean);

3)对象属性过滤转换JSON串
通过JsonConfig对象配置对象哪些属性不参与转换。
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{“price”});

重构练习2

运行效果:

④:XML格式数据处理
练习3:select完成省级联动

  1. XStream的使用
    问题:服务器端如何将java对象,生成XML格式数据?需要第三方类库支持XStream
    XStream is a simple library to serialize objects to XML and back again.
    XStream主要完成Java对象的序列化(xstream-1.3.1.jar)以及解析(xpp3_min-1.1.4c.jar)
  2. XStream的核心方法
     xStream.toXML(obj):将对象序列化XML
     xStream.fromXML(inputStream/xml片段):将xml信息解析成对象
     xStream.alias(String name,Class):将类型解析或者序列化时,取一个别名
    代码案例:(序列化)

解析xml时,要注意别名的命名规则要与序列化时保持一致!
3) XStream注解
在Javabean中进行注解
把某属性的名称取别名为city:@XStreamAlias(value=“city”)
注解生效:xStream.autodetectAnnotations(true);
@XStreamAsAttribute 设置变量生成属性
@XStreamOmitField 设置变量不生成到XML
@XStreamImplicit(itemFieldName = “hobbies”) 设置集合类型变量别名

六、jQuery框架
jQuery 1.4 是企业主流版本,从jQuery1.6 开始引入大量新特性。最新版本 2.1.1,这里讲解以1.8.3为主(新版本主要是浏览器兼容问题以及新特性)
jQuery 提供 jquery-1.8.3.js 和 jquery-1.8.3.min.js
jquery-1.8.3.js jQuery框架源码,没有被精简,体积较大 (主要用来研究 jQuery源码),企业开发时,需要导入 jquery-1.8.3.min.js (精简过)
1.jQuery程序快速入门
window.onload = function() {…}
等价于$(document).ready(function(){…});
①:jQuery基本使用
jQuery可以绑定多个onload函数,而传统模式只能绑定一个函数,后面的会将前面的覆盖掉。
传统Js写法:

jQuery写法:

②:jQuery核心函数
1)jQuery(callback) // 页面onload 函数
2)jQuery(expression, [context]) // 查找指定对象 ------ 九种选择器
3)jQuery(elements) // 将dom对象转换为jQuery对象

  • document 是DOM对象 jQuery(document) 成为了jQuery对象
    4)jQuery(html, [ownerDocument]) // 将html转换jQuery对象
  • jQuery(“

    hello

    ”) ----- 得到 jQuery对象
    Demo:
hello
jQuery对象无法使用DOM对象属性方法,DOM对象也无法使用jQuery对象属性方法。但是我们可以使用jQuery提供方法,将DOM对象通过jQuery()函数包装成为jQuery对象,同样我们可以把jQuery对象转化成DOM对象。 jQuery--->DOM对象:$jQuery对象[0]或者$jQuery对象.get(0); DOM对象--->jQuery:$(DOM对象) 2.jQuery九种选择器 选择器是jQuery 的根基, 在 jQuery 中, 对事件处理, 遍历 DOM 和 Ajax 操作都依赖于选择器 jQuery(expression, [context]) 在核心函数jQuery中传入表达式,对页面中元素进行选择======================jQuery核心函数第二种! ①:基本选择器 根据元素id属性、class属性、元素名称 对元素进行选择 id选择器: $("#元素id属性") class选择器: $(".元素class属性") 元素名称选择器:$("元素名称") 多个选择器同时使用 selector1,select2 例如 : $("#xxid ,.xxxclass") 同时选择id 和 class匹配两类元素 练习1:  通过each() 在每个div元素内容前 加入 “传智播客”  通过size() / length 打印页面中 class属性为 itcast 的元素数量  通过index() 打印 id属性为foo 的div标签 是页面内的第几个div标签

// alert( ( " . i t c a s t " ) . s i z e ( ) ) ; a l e r t ( (".itcast").size()); alert( (".itcast").size());alert((“.itcast”).length);

	// 通过index()  打印 id属性为foo 的div标签 是页面内的第几个div标签
	alert($("div").index($("#foo")));
});
DIVAAAA
DIVBBBB
DIVCCCC
DIVDDDD
DIVEEEE
DIVFFFF

PAAAA

PBBBB

PCCCC

②:层级选择器
根据祖先、后代、父子关系、兄弟关系 进行选择
ancestor descendant 获取ancestor元素下边的所有元素 $(“form input”)
parent > child 获取parent元素下边的所有直接child 子元素 $(“form > input”)
prev + next 获取紧随pre元素的后一个兄弟元素 $(“label + input”)
prev ~ siblings 获取pre元素后边的所有兄弟元素 $(“form ~ input”)
练习2:
 将class属性值为itcast的元素下所有a元素字体变为红色
 将class属性值为itcast的元素下直接a元素字体变为蓝色
 将div元素后所有兄弟a元素,字体变为黄色,大小变为30px

div link

info p link

link

p link

link

③:基本过滤选择器
:first 选取第一个元素 $(“tr:first”)
:last 选取最后一个元素 $(“tr:last”)
:not(selector) 去除所有与给定选择器匹配的元素 $(“input:not(:checked)”)
:even 选取所有元素中偶数索引的元素,从 0 开始计数 $(“tr:even”) ----- 选取奇数元素
:odd 选取所有元素中奇数索引的元素 ,从0 开始计数 $(“tr:odd”) ------ 选取偶数元素
:eq(index) 选取指定索引的元素 $(“tr:eq(1)”)
:gt(index) 选取索引大于指定index的元素 $(“tr:gt(0)”)
:lt(index) 选取索引小于指定index的元素 $(“tr:lt(2)”)
:header 选取所有的标题元素 如:h1, h2, h3 $(“:header”)
:animated 匹配所有正在执行动画效果的元素
练习3:
 设置表格第一行,显示为红色
 设置表格除第一行以外 显示为蓝色
 设置表格奇数行背景色 黄色
 设置表格偶数行背景色 绿色
 设置页面中所有标题 显示为灰色
 设置页面中正在执行动画效果div背景黄色,不执行动画div背景绿色

表格信息

这是一张商品表

商品编号商品名称售价数量
001冰箱3000100
002洗衣机200050
003热水器150020
004手机2188200
<div>
	slideDown(speed, [callback]) 
	概述
	通过高度变化(向下增大)来动态地显示所有匹配的元素,在显示完成后可选地触发一个回调函数。
	这个动画效果只调整元素的高度,可以使匹配的元素以“滑动”的方式显示出来。在jQuery 1.3中,上下的padding和margin也会有动画,效果更流畅。
	参数
	speedString,Number三种预定速度之一的字符串("slow", "normal", or "fast")或表示动画时长的毫秒数值(如:1000)
	callback (可选)FunctionFunction在动画完成时执行的函数
</div>
<div>
	fadeOut(speed, [callback]) 
	概述
	通过不透明度的变化来实现所有匹配元素的淡出效果,并在动画完成后可选地触发一个回调函数。
	这个动画只调整元素的不透明度,也就是说所有匹配的元素的高度和宽度不会发生变化。
	参数
	speedString,Number三种预定速度之一的字符串("slow", "normal", or "fast")或表示动画时长的毫秒数值(如:1000)
	callback (可选)Function在动画完成时执行的函数
</div>

④:内容过滤选择器
内容选择器是对子元素和文本内容的操作
:contains(text) 选取包含text文本内容的元素 $(“div:contains(‘John’)”) 文本内容含有john 的所有div
:empty 选取不包含子元素或者文本节点的空元素 $(“td:empty”) td元素必须为空
:has(selector) 选取含有选择器所匹配的元素的元素 $(“div:has§”).addClass(“test”); 含有p子元素的div
:parent 选取含有子元素或文本节点的元素 $(“td:parent”) 所有不为空td元素选中
练习4:
 设置含有文本内容 ”传智播客” 的 div 的字体颜色为红色
 设置没有子元素的div元素 文本内容 ”这是一个空DIV“
 设置包含p元素 的 div 背景色为黄色
 设置所有含有子元素的span字体为蓝色

今天是个晴天
明天要去传智播客学 java
JavaScript 是网页开发中脚本技术
Ajax 是异步的 JavaScript和 XML

jQuery

是 JavaScript一个 轻量级框架

⑤:可见性过滤选择器
根据元素的可见与不可见状态来选取元素
:hidden 选取所有不可见元素 $(“tr:hidden”)
:visible 选取所有可见的元素 $(“tr:visible”)
练习5:
 为表单中所有隐藏域 添加 class属性,值为itcast
 设置table所有 可见 tr 背景色 黄色
 设置table所有 隐藏tr 字体颜色为红色,显示出来 ,并输出tr中文本值

订单号 itcast-xxxx 金额 100元
冰箱
洗衣机
热水器

⑥:属性过滤选择器
通过元素的属性来选取相应的元素
[attribute] 选取拥有此属性的元素 $(“div[id]”)
[attribute=value] 选取指定属性值为value的所有元素
[attribute !=value] 选取属性值不为value的所有元素
[attribute ^= value] 选取属性值以value开始的所有元素
[attribute $= value] 选取属性值以value结束的所有元素
[attribute *= value] 选取属性值包含value的所有元素
练习6:
 设置所有含有id属性的div,字体颜色红色
 设置所有class属性值 含有itcast元素背景色为黄色
 对所有既有id又有class属性div元素,添加一个点击事件,打印div标签中内容

AAAA
BBBB
CCCC
DDDD
EEEE
FFFF

PPPPPP

⑦:子元素过滤选择器
对某元素中的子元素进行选取
:nth-child(index/even/odd) 选取索引为index的元素、索引为偶数的元素、索引为奇数的元素 ----- index 从1开始 区别 eq
:first-child 选取第一个子元素
:last-child 选取最后一个子元素
:only-child 选取唯一子元素,它的父元素只有它这一个子元素
练习7:
 选择id属性mytable 下3的倍数行,字体颜色为红色
 表格 奇数行 背景色 黄色
 表格 偶数行 背景色 灰色
 只有一个td的 tr元素 字体为 蓝色

加湿器
1冰箱
2洗衣机
3热水器
4电饭锅
5电磁炉
6豆浆机
7微波炉
8电视
9空调
10收音机
11排油烟机
12加湿器
13 电暖气

⑧:表单过滤选择器
选取表单元素的过滤选择器
:input 选取所有、、和元素
:text 选取所有的文本框元素
:password 选取所有的密码框元素
:radio 选取所有的单选框元素
:checkbox 选取所有的多选框元素
:submit 选取所有的提交按钮元素
:image 选取所有的图像按钮元素
:reset 选取所有重置按钮元素
:button 选取所有按钮元素
:file 选取所有文件上传域元素
:hidden 选取所有不可见元素
练习8:
 对所有text框和password框,添加离焦事件,校验输入内容不能为空
 对button 添加 点击事件,提交form表单

用户名
密码
性别 男
城市 北京 上海 个人简介 ⑨:表单对象属性过滤选择器 选取表单元素属性的过滤选择器 :enabled 选取所有可用元素 :disabled 选取所有不可用元素 :checked 选取所有被选中的元素,如单选框、复选框 :selected 选取所有被选中项元素,如下拉列表框、列表框 练习9:  点击button 打印radio checkbox select 中选中项的值 性别 : 男 女
爱好: 体育 读书 音乐 旅游
城市 : 北京 上海 广州
3.jQuery选择器总结 ①:对象访问核心方法 each(function(){}) 遍历集合 size()/length属性 返回集合长度 index() 查找目标元素是集合中第几个元素 ②:CSS样式操作 css(name,value) css({name:value,name:value}); 同时修改多个CSS样式

基本过滤选择器与 筛选过滤 API功能是相同
$(“tr:first”) 等价于 $(“tr”).first()

③:九种选择器重点
 基本选择器和层级选择器 锁定元素
 使用属性过滤选择器和内容过滤选择器 具体选中元素
 表单操作 :checked :selected 选中 表单选中元素
配置基本过滤选择器,缩小选中的范围

4.jQuery的DOM操作
使用jQuery的九种选择器可以基本选中需要操作的对象,但是为了提高jQuery的查询效率,可以结合jQuery的内置查找函数一起使用

①:查询
children([expr]) 获取指定的子元素
find(expr) 获取指定的后代元素
parents([expr]) 获得祖辈元素
parent() 获取父元素
next([expr]) 获取下一个兄弟元素
prev([expr]) 获取前一个兄弟元素
siblings([expr]) 获取所有兄弟元素
在XML 解析中 find 方法使用最多
对查找结果进行遍历操作 each(function(){… }) ,在each函数中可以通过this 获得DOM对象,$(this) 获得jQuery对象

②:属性操作
设置属性 attr(name,value)
读取属性 attr(name)
同时设置多个属性 attr({name:value,name:value… });
attr(“checked”,“true”) 等价于 prop(“checked”)
练习1:
 点击一个button,动态设置 div的属性 id name class
 尝试能否设置一个不存在的属性?

itcast

③:CSS操作
通过attr属性设置/获取 style属性
attr(‘style’,‘color:red’); // 添加style属性
设置CSS样式属性
css(name, value) 设置一个CSS样式属性
css(properties) 传递key-value对象,设置多个CSS样式属性
设置class属性
addClass(class) 添加一个class属性
removeClass([class]) 移除一个class属性
toggleClass(class)如果存在(不存在)就删除(添加)一个类
练习2:
 点击button,使一个div的背景颜色变为 黄色
 通过toggleClass(class) 实现点击 字体变为紅色,再点击样式还原

AAAAAA

④:HTML代码&文本&值操作
 读取和设置某个元素中HTML内容
html() 读取innerHTML
html(content) 设置innerHTML
 读取和设置某个元素中的文本内容
text() 读取文本内容
text(content) 设置文本内容
 文本框、下拉列表框、单选框 选中的元素值
val() 读取元素value属性
val(content) 设置元素value属性
练习3:

传智播客

获取div中 html和text 对比
 使用val() 获得文本框、下拉框、单选框选中的value
 测试能否通过 val() 设置单选框、下拉框的选中效果

用户名
性别 男 女
城市 北京 上海 广州
设置 val控制radio select checkbox 选中 $("#city").val("广州"); $("input[name='gender']").val(['女']);

练习4:
 输出所有select元素下的所有option元素中对应的文本内容
例如:中专^^ 输出—>中专^^

博士 硕士 本科 大专

⑤:jQuery添加元素
 创建元素
拼接好HTML代码片段 $(html片段) ---- 产生jQuery对象
 内部插入:
n o d e . a p p e n d ( node.append( node.append(newNode) 内部结尾追加
n o d e . p r e p e n d ( node.prepend( node.prepend(newNode) 内部开始位置追加
 外部插入:
n o d e . a f t e r ( node.after( node.after(newNode) 在存在元素后面追加 – 兄弟
n e w N o d e . i n s e r t B e f o r e ( newNode.insertBefore( newNode.insertBefore(node) 在存在元素前面追加
练习5:
 在id=edu下增加大专

博士 硕士 本科 高中

⑥:jQuery删除元素
选中要删除元素.remove() ---- 完成元素删除
选中要删除元素.remove(expr) ----- 删除特定规则元素

remove删除节点后,事件也会删除
detach删除节点后,事件会保留 从1.4新API
练习6:
 分别使用detach和remove 删除带有click事件的p标签,删除后再将p 重新加入body 查看事件是否存在

AAA

BBB

练习7:
 表格数据添加与删除练习

姓名 邮箱 手机

姓名邮箱手机删除

⑦:jQuery复制和替换
 复制节点
$(“p”).clone(); 返回节点克隆后的副本,但不会克隆原节点的事件
$(“p”).clone(true); 克隆节点,保留原有事件
 替换节点
$(“p”).replaceWith(“ITCAST”); 将所有p元素,替换为"ITCAST
$(“ITCAST”).replaceAll(“p”); 与replaceWith相反

⑧:全选以及左右移动练习
练习8:
 全选练习

请选择您的爱好
全选/全不选
足球 篮球 游泳 唱歌

练习9:
 左右移动练习

北京 上海 天津 杭州 武汉 广州 深圳 南京
<input type="button" value="-->" id="chooseToRight" />
<input type="button" value="==>" id="allToRight" />
<input type="button" value="<--" id="chooseToLeft" />
<input type="button" value="<==" id="allToLeft" />

<select id="right" multiple="multiple" size="15">
	<option>郑州</option>
</select>
5.jQuery事件 ①:事件绑定 传统js 一般一个对象只能绑定某种事件一个函数 jQuery 支持对同一个对象,同一个事件可以绑定多个函数 绑定事件函数到对象有两种写法 写法一 $("div").click(function(){ …… }); 取消绑定:$("div").unbind("click");

*** live 为满足条件对象,实时追加绑定 、取消live事件用die方法
Demo:

AAA
BBB

②:事件一次性绑定和自动触发
一次性事件 one(type, [data], fn) 为对象绑定一次性事件,只有一次有效
触发事件 trigger(type, [data]) 触发目标对象指定的事件执行
练习1:
 为页面内所有p 元素绑定 一次性事件,点击打印p元素中内容
 页面内有两个按钮,点击按钮1, 触发按钮2的 click事件执行

传智播客

③:事件切换
hover(mouseover,mouseout) 模拟鼠标悬停事件
toggle(fn1,fn2,fn3…) ; 鼠标点击一次 触发一个函数
练习1:
 编写一个div元素,光标移动上去 字体变为红色,移开后 变为蓝色
 建立三张图片,页面显示第一张,点击切换到第二张,点击切换到第三张

鼠标移动上 会变色的内容!

④:事件阻止默认动作和传播
 默认动作阻止
$(“a”).click(function(event){
event.preventDefault();
// do something
});
 取消事件冒泡
$(“p”).click(function(event){
event.stopPropagation();
// do something
});

删除资料

信息

七、jQuery的Ajax编程
1.回顾传统Ajax开发步骤
①:创建xmlHttpRequest对象
var xmlHttp = creatHttpRequest();
②:绑定回调函数
xmlHttp.onreadystatechange = function(){……}
③:建立连接
xmlHttp.open(“GET”,”url”);
④:发送数据
xmlHttp.send(null) //GET请求
如果是POST请求需要设置编码格式:
xmlHttp.setRequestHeader(“CONTENT-TYPE”,“application/x-www-form-urlencoded”);
xmlHttp.send(“key=value?key=value”)
⑤:书写回调函数
if(readyState == 4){
if(status ==200){
……
//操作xmlHttp.responseText主要针对返回HTML片段和json
//操作xmlHttp.responseXML主要针对返回XML片段。
}
}
2.jQuery的Ajax开发
jQuery提供了最底层的Ajax调用方法:$.ajax
KaTeX parse error: Expected '}', got '&' at position 52: …ata: "name=John&̲location=Boston….ajax()进一步的封装方法 l o a d 、 load、 loadget、 p o s t 。 这 三 个 方 法 不 支 持 跨 域 , post。这三个方法不支持跨域, postgetJSON、$getScript支持跨域。
①:load方法
load方法是jQuery中最为简单和常用的Ajax方法,处理HTML片段此方法最为合适。
语法
( " j q u e r y 对 象 " ) . l o a d ( " u r l " , " d a t a " ) ; u r l : A j a x 访 问 服 务 器 地 址 d a t a : 请 求 参 数 返 回 内 容 H T M L 片 段 , 自 动 放 入 ("jquery对象").load("url","data") ; url:Ajax访问服务器地址 data:请求参数 返回内容HTML片段 ,自动放入 ("jquery").load("url","data");urlAjax访dataHTML(“jquery对象”)innerHTML 中(如果返回的数据需要处理,我们可以使用get或者post)

load()方法的传递参数根据参数data来自动自定。如过没有参数的传递,采用GET方式传递,否则采用POST方式
练习一:校验用户名是否存在
此练习在第五章的第三小节有实现代码,这里使用jQuery的方式进行简要的列出核心代码:
$(function(){
// 为用户名添加离焦事件
$(“input[name=‘username’]”).blur(function(){
// 获得当前输入 username
var username = $(this).val();
// 提交Ajax校验
$(“#info”).load(“/Ajax/checkUsername” , {‘username’: username});
});
});

用户名
密码
②:get方法和post方法 语法 : $.get/$.post("url","parameter",function(data){...}); url Ajax访问服务器地址 parameter 代表请求参数 function 回调函数 data 代表从服务器返回数据内容 这里data代表各种数据内容 : HTML片段、JSON、XML

如果传递参数给服务器使用 $.post , 不需要传参数 可以使用 $.get

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值