JavaScript

①边学边练

一、实现左右框体之间互相移动

  这个功能实现的原理是在表格单元中定义两个select选项并设置相应的选项框。

  1.首先分别获得两个选框中的元素,并定义添加按钮的单击事件,获得选中选项的索引作为向第二个选项框中添加选项的appendChild函数参数。

  var firstSelectElement = document.getElementById("first");
      var secondSelectElement = document.getElementById("second");

  document.getElementById("add").onclick=function(){

  var optionChildren = firstSelectElement.getelementsTagName("option");

  var index = firstSelectElement.selectedIndex;

  secondSelectElement.appendChild(optionChildren[index]);

  }

  2.实现把左边选框中选项全部添加到右边的选框中。

  document.getElementById("add_all").onclick=function(){
      var optionChildren = firstSelectElement.getElementsByTagName("option");
      var optionLength = optionChildren.length;
      for(var i=0;i<optionLength;i++){
            secondSelectElement.appendChild(optionChildren[i]);
        }

  3.双击第一个选框实现自动移动

  定义第一个select元素的双击事件函数

  firstSelectElement.ondblclick=function(){
      var index = firstSelectElement.selectedIndex;
      var optionChildren = firstSelectElement.getElementsByTagName("option");
      secondSelectElement.appendChild(optionChildren[index]);
      }

二、两个选择框之间的省市城市的联动

  首先定义两个下拉选框的结构,并在另一个xml文件中定义省和市的选项结构,作为联动的选  项。

  1.给ID为province的select元素注册onchange事件

  document.getElementById("province").onchange = function(){

  var citySelectElement = document.getElementById("city");

  var cityOptionElements = citySelectElement.getElementsTagName("option");

    for(var i=cityOptionElements.length-1; i>0; i--){

      citySelectElement.removeChild(cityOptionElements[i]);

    }

  }

  2.得到xml文档中的选项结构

  var  xmlDoc = parseXML();

  var selectedProvince = this.value;

  var xmlProvince;

  var xmlProvinceElements = xmlDoc.getElementsByTagName("province");

  for(var i = 0; i < xmlProvinceElements.length; i++){

    if(selectedProvince == xmlProvinceElements[i].getAttribute("name“){

     xmlProvince = xmlProvinceElements[i];

     break;

  }

    if(xmlProvince!=null){
             var xmlCitys = xmlProvince.getElementsByTagName("city");
             for (var i = 0; i < xmlCitys.length; i++) {
                   var optionElement = document.createElement("option");//<option></option>
                   optionElement.setAttribute("value",xmlCitys[i].firstChild.nodeValue);//<option value="济南"></option>
                   var textNode = document.createTextNode(xmlCitys[i].firstChild.nodeValue);
                   optionElement.appendChild(textNode);
                   citySelectElement.appendChild(optionElement);
                    }
                }

  }

 三、输入合法信息的验证,(此例太low不便展示)

1.正则表达式限制用户名的组成格式

var pattern = new RegExp("^[a-zA-Z0-9\u4e00-\u9fa5]{5,8}$");

var flag = pattern.test(username);

if(!flag){

  alert("登录名必须是5-8为字母数字或汉字");

  return false;

}

直接量形式

var pattern = /^[a-zA-Z0-9\u4e00-\u9fa5]{5,8}$/;

var falg = pattern.test(username);

if(!flag)

{

  alert("登录名必须是5-8为字母数字或汉字);

}

var pattern = /^[\w]{6,12}$/;//密码不包含中文字符

 四、ajax进行get和post的请求

1.get请求

window.onload=function(){//当页面被全部加在完毕后再执行
            //给b1按钮注册事件
            document.getElementById("b1").onclick=function(){
                //AJAX代码
                
                //得到XmlHttpRequest对象
                var xhr = createXmlHttpRequest();
                //xhr的readyState改变都会触发onreadystatechange事件
                    
                    /*
                     * readyState的取值:
                     *     0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)
                     *     1 (初始化) 对象已建立,尚未调用send方法
                     *  2 (发送数据) send方法已调用,但是当前的状态及http头未知
                     *     3 (数据传送中) 已接收部分数据,因为响应及http头不全,
                     *     4 (完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

                     */
                xhr.onreadystatechange=function(){
                    if(xhr.readyState==4){
                        //真正的处理
                        if(xhr.status==200||xhr.status==304){
                            //服务器正确返回
                            var data = xhr.responseText;//服务器返回的数据
                            //把返回的数据写到div中
                            document.getElementById("d1").innerHTML=data;
                        }
                    }
                }
                //建立与服务器的连接
                    /*
                     * oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);
                     * bstrMethod:请求方式。一般使用get或post
                     * bstrUrl:请求的资源地址:可以绝对或相对路径
                     * varAsync:是否是异步请求。默认是true。
                     */
                xhr.open("GET","/ajaxday02/servlet/ServletDemo1?time="+new Date().getTime());
                //发送数据
                    //oXMLHttpRequest.send(varBody);  varBody:请求参数
                xhr.send(null);

                //接收服务器返回的数据
                    
                
            }
        }

2.post请求方式

window.onload=function(){
            document.getElementById("b1").onclick = function(){
                //获取xmlhttpRequest对象
                var xhr = createXmlHttpRequest();
                //注册状态变化的回调函数
                xhr.onreadystatechange = function(){
                    if (xhr.readyState == 4) {
                        if (xhr.status == 200 || xhr.status == 304) {
                        //什么都不做
                        }
                    }
                }
                //初始化xmlhttpRequest对象,即open
                xhr.open("POST", "/ajaxday02/servlet/ServletDemo2?time=" + new Date().getTime());
                //设置请求消息头,告知服务器,发送的正文数据的类型。
                xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                //发送数据
                xhr.send("username=admin&password=123");
            }
        }
        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;
         }
3.ajax实现级联菜单

window.onload=function(){

//得到服务器返回的xml文件

  var xhr = createXmlHttpRequest();

  xhr.onreadystatechange=function(){

    if(xhr.readyState==4){

      if(xhr.status==200||xhr.status==304){

var xmlDoc = xhr.responseXML;

var xmlProvinceElements = xmlDoc.getElementsByTagName("province");

for(var i=0; i<xmlProvinceElements.length;i++){

var optionElement = document.createElement("option");

optionElement.setAttribute("value",xmlProvinceElements[i].getAttribute("name"));

var textNode = document.createTextNode(xmlProvinceElements[i].getAttribute("name"));

optionElement.appendChild(textNode);
                             document.getElementById("province").appendChild(optionElement);

}

xhr.open("GET","/ajaxday02/servlet/ServletDemo4?time="+new Date().getTime());
             xhr.send(null);

}

}

}

}

 五、json格式的前端数据交互

json和xml比较都可用作数据的存储结构。然而他们都有自己的优点和缺点。分别在代码量,解析难度等。

json优势在于JavaScript主场在前端的数据交互中,免去了xml那种闭合标签的繁琐,而且在编写和解析方面更加方便。

 1.json的语法规则

  JSON 语法是 JavaScript 对象表示语法的子集。

  • 数据在键值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

 JSON 名称/值对

"firstName":"John"

JavaScript 语句:firstName="John"

 2.基础结构

  1、对象{key:value,key:value,...}

   2、数组["java","javascript","vb",...]字段值的类型可以是 数字、字符串、数组、对象几种。

3.实例

perple对象

{
    "programmers": [{
        "firstName": "Brett",
        "lastName": "McLaughlin",
        "email": "aaaa"
    }, {
        "firstName": "Jason",
        "lastName": "Hunter",
        "email": "bbbb"
    }, {
        "firstName": "Elliotte",
        "lastName": "Harold",
        "email": "cccc"
    }],
    "authors": [{
        "firstName": "Isaac",
        "lastName": "Asimov",
        "genre": "sciencefiction"
    }, {
        "firstName": "Tad",
        "lastName": "Williams",
        "genre": "fantasy"
    }, {
        "firstName": "Frank",
        "lastName": "Peretti",
        "genre": "christianfiction"
    }],
    "musicians": [{
        "firstName": "Eric",
        "lastName": "Clapton",
        "instrument": "guitar"
    }, {
        "firstName": "Sergei",
        "lastName": "Rachmaninoff",
        "instrument": "piano"
    }]
}
 
people为JavaScript变量
var people = {
    "programmers": [{
        "firstName": "Brett",
        "lastName": "McLaughlin",
        "email": "aaaa"
    }, {
        "firstName": "Jason",
        "lastName": "Hunter",
        "email": "bbbb"
    }, {
        "firstName": "Elliotte",
        "lastName": "Harold",
        "email": "cccc"
    }],
    "authors": [{
        "firstName": "Isaac",
        "lastName": "Asimov",
        "genre": "sciencefiction"
    }, {
        "firstName": "Tad",
        "lastName": "Williams",
        "genre": "fantasy"
    }, {
        "firstName": "Frank",
        "lastName": "Peretti",
        "genre": "christianfiction"
    }],
    "musicians": [{
        "firstName": "Eric",
        "lastName": "Clapton",
        "instrument": "guitar"
    }, {
        "firstName": "Sergei",
        "lastName": "Rachmaninoff",
        "instrument": "piano"
    }]
};
数据的访问
但是上面的长字符串实际上只是一个数组
 
  people.programmers[0].lastName;
json的嵌套格式
 
{  
  id: '100000',  
  text: '廊坊银行总行',  
  children: [  
    {  
      id: '110000',  
      text: '廊坊分行',  
      children: [  
        {  
          id: '113000',  
          text: '廊坊银行开发区支行',  
          leaf: true  
        },  
        {  
          id: '112000',  
          text: '廊坊银行解放道支行',  
          children: [  
            {  
              id: '112200',  
              text: '廊坊银行三大街支行',  
              leaf: true  
            },  
            {  
              id: '112100',  
              text: '廊坊银行广阳道支行',  
              leaf: true  
            }  
          ]  
        },  
        {  
          id: '111000',  
          text: '廊坊银行金光道支行',  
          leaf: true  
        }  
      ]  
    }  
  ]  

 
4.json的详解与json工具与json lib包
 

 

②基础回顾

一、函数

   1、function是一个函数(多种函数的定义方法,记住一个就可以,和函数定义类似)

  function aa(){
  }

   2、function是一个对象,可以利用该对象的constructor属性找到该对象的构造函数

  aa.constructor

   3、一个对象(这个对象必须有值,不能是null,undefined)可以动态的添加任何一个属性

  这个对象可以通过直接赋值的方式添加相应属性,比如:aa.b=5; aa.bb=a;(a为对象)。

   4、一个function同时又是一个构造器函数

  new Function()产生一个对象,所以这个创建函数就是一个构造器。一个对象本身就是一个一个函数,并且是自己的构造函数。

   5、任何一个对象都有可能成为任何一个对象的属性

  一个对象的属性可包含一个对象。

二、prototype

  prototype好像一个可变的容器对象作为一个js对象的属性。

  1. prototype是function中的一个属性,也是一个对象

    2. prototype是一个json格式的对象,可以动态的往json中添加一些内容

          Person.prototype.name = function(){

              alert("name");

          }

          Person.prototype["sex"] = "male";

   3  根据构造器可以创建对象,而创建出来的对象就拥有了prototype中的数据

三、继承的封装

四、自定义事件

  jquery的事件是可以叠加的,要先解绑在绑定。

  1.声明一个事件,把事件绑定到一个dom对象上。

  2.找一个事件的触发方式

  3.传递参数

 

③JavaScript的语法基础补充

标签,脚本段,保留关键字和标识符,变量类型。

一:href的属性可以为JavaScript脚本例如:href=“JavaScript:alert(new Date())”

二:JavaScript区分大小写,

三:整型常量,实型常量,布尔值,字符串常量

四:字符串alert(“111111111111”+

“22222222222222222”);//换行需要连接符

五:x=1234;没有声明变量直接定义。

运算符

+ - * / % ++ --  += /= > == || && ! >>

一:+运算符的可以用于字符串,但是两个操作数的必须有一个是字符串。

&:逻辑与,二者都为1才为1;与|相反。

^:异或,相同为0,相异为1;

>>:位运算符(不会改变原来变量的值),补位的话要考虑到符号位也就是最高位。但是如果是右移就是除以2的n次方,左移的话相反。其中左移的话补位总是补零。

>>>:进行无符号右移的话,最高位直接填充bit零。

流程控制语句

顺序结构 条件结构 循环结构

if while do while  switch  for continue和break

一:if(!x)=if(x==null || typeof(x)==undefined);

函数(存在问题)

 

posted @ 2016-05-23 08:59  Jin_c  阅读(178)  评论(0编辑  收藏  举报