zoukankan      html  css  js  c++  java
  • js-day05-JSON-jQuery初体验

    JSON数据格式

    JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。易于人阅读和编写,同时也易于机器解析和生成(网络传输速度快)
    JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。

    描述一个对象 {属性名:属性值,属性名:属性值}

    JSON的规则很简单:
    对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。
    规则如下:
      1)映射用冒号(“:”)表示。名称:值
      2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2
      3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}
      4) 并列数据的集合(数组)用方括号(“[]”)表示。
        [
          {名称1:值,名称2:值2},
          {名称1:值,名称2:值2}
        ]
      5 元素值可具有的类型:string, number, object, array, true, false, null

    //JSON:是一种数据格式,主要用来表示描述对象、封装对象的数据
    //表示单个对象
    //使用{}:Map<String,Object>
    var p = {
        name:"will",
        age:17,
        sex:true,
        hireDate:new Date(),
        hobbys:["java","ACG","book"],
        dept:{
            id:9527,
            name:"管理部"
        }
    };
    //获取对象中的属性值
    console.debug(p);
    console.debug(p.age);
    console.debug(p.sex);
    console.debug(p.hobbys);
    console.debug(p.dept.name);
    
    //表示多个对象
    //使用[]:List<Map<String,Object>>
    var persons = [p,p,p];
    console.debug(persons);
    var persons = [{
            name:"will",
            age:17,
            sex:true,
            hireDate:new Date(),
            hobbys:["java","ACG","book"],
            dept:{
                id:9527,
                name:"管理部"
            }
        },{
            name:"will",
            age:17,
            sex:true,
            hireDate:new Date(),
            hobbys:["java","ACG","book"],
            dept:{
                id:9527,
                name:"管理部"
            }
        },{
            name:"will",
            age:17,
            sex:true,
            hireDate:new Date(),
            hobbys:["java","ACG","book"],
            dept:{
                id:9527,
                name:"管理部"
            }
        }
    ];

    注意:
    1.JSON数据格式:(注意:标准的JSON的属性也使用引号)
    2.字符串转成对象:
    3.json对象的toSource方法
    ------------------------------------------------------------
    var str = "{name : 'will',age : 17}";
    console.debug(str);
    //eval函数,可以把一个字符串转换为JS代码
    var p = eval("("+str+")");
    console.debug(p.toSource());
    ------------------------------------------------------------
    最好是:在JSON字符串前后,都带有();

    使用JSON实现二级联动

    使用JSON作为后台和前台的数据交互格式.
    --------------------------------------------------------------------
    在服务端需要把省份/城市的数据,拼接成一个JSON的字符串,并响应给JS.
    JS需要把字符串的JSON数据,转换为JSON对象.-->每一个对象,都创建一个<option>元素,并存放数据.
    使用JSON表示省份:
    String jsonData = "[{id:1,name:'四川'},{id:2,name:'广东'},{id:3,name:'陕西'}]";

    示例代码:

    //Ajax二级联动之JSON格式
    public class LinkageByJSONAction extends ActionSupport {
        
        private static final long serialVersionUID = 1L;
    
        private Long pid;
        
        public void setPid(Long pid) {
            this.pid = pid;
        }
    
        //获取所有省份
        /*
         * [
         * {id:1,name:'四川'},
         * {id:2,name:'广东'},
         * {id:3,name:'陕西'}
         * ]
         */
        public String getProvinces() throws Exception{
            StringBuilder sb = new StringBuilder(200);
            //获取所有省份
            List<Province> provinces = Province.getAllProvince();
            
            sb.append("[");
            for(Province p : provinces){
                sb.append("{");
                sb.append("id:").append(p.getId()).append(",");
                sb.append("name:").append("'").append(p.getName()).append("'");
                sb.append("}");
                sb.append(",");
            }
            sb.deleteCharAt(sb.length()-1);
            sb.append("]");
            //System.out.println(sb);
            //设置编码,并且打印JSON格式的信息
            ServletActionContext.getResponse().setContentType("text/json;charset=utf=8");
            ServletActionContext.getResponse().getWriter().print(sb);
            return NONE;
        }
        
        //获取对应id省份的城市    
        /*
         * [
         * {id:1,name:'广州'},
         * {id:2,name:'深圳'},
         * {id:3,name:'东莞'}
         * ]
         */
        public String getCitys() throws Exception{
            StringBuilder sb = new StringBuilder(200);
            //获取对应id省份的城市    
            List<City> citys = City.getCityByProvinceId(pid);
            
            sb.append("[");
            for(City c : citys){
                sb.append("{");
                sb.append("id:").append(c.getId()).append(",");
                sb.append("name:").append("'").append(c.getName()).append("'");
                sb.append("}");
                sb.append(",");
            }
            sb.deleteCharAt(sb.length()-1);
            sb.append("]");
            //System.out.println(sb);
            //设置编码,并且打印JSON格式的信息
            ServletActionContext.getResponse().setContentType("text/json;charset=utf=8");
            ServletActionContext.getResponse().getWriter().print(sb);
            return NONE;
        }
    }
    <body>
        <h3>Ajax二级联动,HTML格式</h3><br/>
        省份:<select id="province" onchange="getCitys();"><option>请选择</option></select>
        市级:<select id="city"><option>请选择</option></select>
    </body>
    //简单的Ajax,二级联动,JSON格式
    //获取省份
    window.onload = function(){
        //页面加载完毕之后,把所有省份查询出来并显示到页面
        var ajax = createAjax();
        ajax.open("get","/linkage/json_getProvinces.action",true);
        ajax.onreadystatechange = function(){
            if(ajax.readyState == 4 && ajax.status == 200){
                var jsonArray = eval("("+ajax.responseText+")");
                for (var index = 0; index < jsonArray.length; index++) {
                    var jsonResult = jsonArray[index];//每一个省份对象
                    
                    //针对每一个省份对象都创建<option>元素
                    var optionEl = document.createElement("option");
                    optionEl.value = jsonResult.id;
                    optionEl.innerHTML = jsonResult.name;
                    document.getElementById("province").appendChild(optionEl);
                }
            }
        };
        ajax.send();
    };
    //获取市级,根据不同省份
    function getCitys(){
        //获取省份id
        var pid = document.getElementById("province").value;
        document.getElementById("city").innerHTML = "<option>请选择</option>";
        //alert(pid);
        if(!parseInt(pid)){
            return;
        }
        var ajax = createAjax();
        ajax.open("get","/linkage/json_getCitys.action?pid="+pid,true);
        ajax.onreadystatechange = function(){
            if(ajax.readyState ==4 && ajax.status == 200){
                var jsonArray = eval("("+ajax.responseText+")");
                for (var index = 0; index < jsonArray.length; index++) {
                    var jsonResult = jsonArray[index];//每一个市级对象
                    
                    //针对每一个市级对象都创建<option>元素
                    var optionEl = document.createElement("option");
                    optionEl.value = jsonResult.id;
                    optionEl.innerHTML = jsonResult.name;
                    document.getElementById("city").appendChild(optionEl);
                }
            }
        };
        ajax.send();
    }
    
    //创建Ajax对象,处理W3C和IE6以下版本浏览器的兼容性
    function createAjax(){
        var ajax = null;
        
        try {
            ajax = new XMLHttpRequest();
        } catch (e) {
            ajax = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return ajax;
    }

    JSON转换工具(JSON lib和fast JSON)

    JSON的转换工具(提供JSON对象和Java对象(JavaBean/集合)的相互转换方法):
      1):JSON lib.(最广泛的,需要依赖另外的5个jar).
      2):fast json(阿里开发的,号称世界第一,不需要依赖,有一个即可.)

    测试代码:

    @Test
        public void testJSONLib() throws Exception {
            List<Province> provinces = Province.getAllProvince();//多个对象s
            Province p = provinces.get(0);//单个对象
            //把单个对象转化为JSON字符串:JSONObject
            //{"id":1,"name":"四川"}
            System.out.println(JSONSerializer.toJSON(p));
            
            //把多个对象转化为JSON字符串:JSONArray
            //[{"id":1,"name":"四川"},{"id":2,"name":"广东"},{"id":3,"name":"陕西"}]
            System.out.println(JSONSerializer.toJSON(provinces));
            
            //支持把map转化为JSON格式
            Map<String,Object> map = new HashMap<>();
            map.put("id", 17);
            map.put("name", "四川");
            //{"name":"四川","id":17}
            System.out.println(JSONSerializer.toJSON(map));
        }

    测试代码:

    @Test
        public void testFastJSON() throws Exception {
            List<Province> provinces = Province.getAllProvince();//多个对象s
            Province p = provinces.get(0);//单个对象
            //把单个对象转化为JSON字符串:JSONObject
            String str1 = JSON.toJSONString(p);
            //{"id":1,"name":"四川"}
            System.out.println(str1);
            
            //把多个对象转化为JSON字符串:JSONArray
            String str2 = JSON.toJSONString(provinces);
            //[{"id":1,"name":"四川"},{"id":2,"name":"广东"},{"id":3,"name":"陕西"}]
            System.out.println(str2);
            
            //支持把map转化为JSON格式
            Map<String,Object> map = new HashMap<>();
            map.put("id", 17);
            map.put("name", "四川");
            //{"name":"四川","id":17}
            System.out.println(JSON.toJSONString(map));
        }

    jQuery简介

    1,jQuery简单背景介绍;
    jQuery是继prototype之后又一个优秀的Javascript框架,(Extjs)。
    jQuery是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)
    jQuery是免费、开源的。
    jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多).

    2,jQuery版本介绍
    jQuery1.x: 经典版本,兼容IE6,7,8;
    jQuery2.x:改进版本,及后续版本将不再支持IE6,7,8浏览器。

    jQuery能干什么?
    jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互
    jQuery的语法设计可以使开发者更加便捷,例如操作文档对象、选择DOM元素、制作动画效果、事件处理、使用Ajax以及其他功能。

    3,JQuery文件介绍;
    jQuery1.x.js:jQuery源文件;学习jQuery或者debug的时候使用;
    jQuery1.x.min.js:jQuery压缩之后的文件;正常项目中使用;

     

    jQuery的引入和体验

    jQuery引入(安装):
    第1步:引入jQuery的库文件:<script type="text/javascript" src="../jquery-1.11.2.min.js"></script>
    第2步:引入我们自己的js : <script type="text/javascript" src="index.js"></script>
    第3步:在index.js中,alert($),如果输出的是一个函数,说明安装成功!
    出错效果如下:

    使用不同的jQuery插件,可能依赖的jQuery库的版本不一致,此时请保留插件依赖的jQuery库.

    神奇的$:
    在jQuery中,$其实就是jQuery对象($ === jQuery).
    -------------------------------------------------------------------------------------
    案例:模拟Struts2的debu标签.(传统js代码和jQuery代码)

     示例代码:

    <title>Insert title here</title>
        <script type="text/javascript" src="../jquery-1.11.2.js"></script>
        <script type="text/javascript" src="index.js"></script>
    </head>
    <body>
        <h3>模拟Struts2的debug标签</h3>
        <a href="#" id="debug1">debug(传统方式)</a><br/>
        <a href="#" id="debug2">debug(jQuery方式)</a>
        <div id="detail" style="display: none;">
            <h3>キセキ~未来へ~</h3>
            明日、今日よりも好きになれる 溢れる想いが止まらない<br/>
            明天会比今天更喜欢你 满溢的思念无法停止<br/><br/>
            今もこんなに好きでいるのに 言葉に出来ない<br/>
            现在虽然如此喜欢你 但却无法用语言表述<br/><br/>
            君のくれた日々が積み重なり 過ぎ去った日々2人歩いた「軌跡」<br/>
            你给予我的岁月沉淀累积 过去的日子里两个人一起前行的「轨迹」<br/><br/>
            うまく行かない日だって 2人で居れば晴れだって!<br/>
            不顺利的日子 两个人在一起就会放晴<br/><br/>
            喜びや悲しみも 全て分け合える<br/>
            喜悦或是悲伤 全部一起分享<br/><br/>
            君が居るから 生きていけるから!<br/>
            正因为有你 我才能活下去<br/><br/>
            だからいつも そばに居てよ 「愛しい君へ」最後の一秒まで<br/>
            所以一直留在我身边吧 「致可爱的你」直到最后一秒<br/><br/>
            明日、今日より笑顔になれる 君が居るだけで そう思えるから<br/>
            明天 会比今天有更好的笑颜 只要有你在 我就会这样想<br/><br/>
            何十年 何百年 何千年 時を超えよう 君を愛してる<br/>
            无论是几十年 几百年 还是几千年 都要超越时光地爱着你<br/><br/>
        </div>
    </body>
    //当页面加载完毕,给id为debug1的超链接绑定点击事件
    window.onload = function(){
        document.getElementById("debug1").onclick=function(){
            var div = document.getElementById("detail").style.display;
            if(div){
                document.getElementById("detail").style.display = "";
            } else {
                document.getElementById("detail").style.display = "none";
            }
        };
    };
    
    //使用jQuery完成
    $(function(){
        $("#debug2").click(function(){
            $("#detail").toggle(200);
        });
    });

    $(function(){
      //页面加载完毕之后,就执行的代码,相当于window.onload事件
    });
    ---------------------------------------------------------------------------
    window.onload=function(){};只能编写一次,后写会覆盖之前写的.
    而$(function(){});可以写N次.
    --------------------------------------------------
    $("#ox"):获取ID属性为ox的元素对象.

    jQuery对象

    需求:获取和修改某个元素的文本内容.
    -----------------------------------------------------------------------------------
    引入问题:通过document.getElementById()找到的console内容和通过$();找不到元素console返回的内容不一样;

    1,通过jQuery方法获取的页面元素,都是jQuery对象。
    2,jQuery对象其实就是对DOM对象进行了包装,增强相关了方法,让开发者使用起来更加便利。
      jQuery对象其实是模拟了数组(伪数组),每一个索引对应一个真正的DOM元素.
      jQuery对象是不可能为null的,可以根据jQuery的length是否为0来判断,当前是否查询出了DOM元素.
    3,虽然jQuery对象包装了DOM对象但是两种不能混用,各位可以理解为jQuery对象与DOM对象是两个不类型的对象,但是我们调用jQuery对象的方法,事实上底层代码还是操作的是DOM对象。
    -----------------------------------------------------------------------------------------------------------------------
    jQuery对象和DOM对象的关系,是jQuery对象包含了DOM对象.
    jQuery对象和DOM对象的获取方式,以及相互的转换问题:
      1):使用jQuery方法获取的对象都是jQuery对象.
      2):使用document.getElementById/getElementsByTagName/getEelementsByName获取的都是DOM对象.

    jQuery对象转换为DOM对象:
      jQuery对象[index]或者jQuery对象.get(index):表示当前jQuery对象中包装的第index个DOM元素.
    DOM对象转换为jQuery对象: $(DOM对象);

    ----------------------------------------------------
    jQuery对象只能访问jQuery对象的属性和方法,不能访问DOM对象的属性和方法.
    DOM对象只能访问DOM对象的属性和方法,不能访问jQuery对象的属性和方法.

    //获取id为div1的文本内容
    $(function(){
        //通过jQuery选择器查询出来的都是jQuery对象
        var jQueryObject = $("div");
        console.debug(jQueryObject);//jQuery
        console.debug(jQueryObject.innerHTML);//innerHTML是DOM对象的方法,jQuery对象不能使用
        //jQuery对象转化为DOM对象
        console.debug(jQueryObject[0].innerHTML);
        console.debug(jQueryObject.get(0).innerHTML);
        
        console.debug("===================")
        //DOM对象转化为jQuery对象
        var domObject = document.getElementById("div1");
        console.debug(domObject);
        console.debug($(domObject));
        console.debug($(domObject).text());
    });
    /*    
    jQuery常用方法:<br/>
    jquery.size()//获取jquery获取dom的个数.<br/>
    jquery.val();//获取表单标签相关的值。<br/>
    jquery.html();//获取标签中的HTML代码。<br/>
    jquery.text();//获取标签中的纯文本,忽略html代码。<br/>
     */    
    //<li>问题一:获得username的值; </li>
    $(function(){
        var username = $("#username").val();
        console.debug(username);//圣光啊
    });
    //<li>问题二:为username设置值;</li>
    $(function(){
        var username = $("#username").val("那个邪恶看起来值得一战").val();
        console.debug(username);//那个邪恶看起来值得一战
    });
    //<li>问题三:获取h1的html内容和纯文本内容,对结果进行比较;</li>
    $(function(){
        var html = $("#h1").html();
        var text = $("#h1").text();
        console.debug(html);
        console.debug(text);
    });
    //<li>问题四:把h1的颜色设置为黄色(attr);</li>
    $(function(){
        //$("#h1").attr("style","background:yellow");
        $("#h1").css("background","yellow").css("color","gray");
    });
    //<li>问题五:完成类似struts2的debug效果(toggleClass/toggle);</li>
    $(function(){
        $("#debug").click(function(){
            $("#question").toggle();
        });
    });

    jQuery选择器概述/如何学习jQuery/jQuery常用方法

    文档在手,天下我有!
    ------------------------------------------------------------------------------------
    jQuery选择器是jQuery类库最重要功能之一。
    这些选择器的用法和CSS的语法非常相似,结合jQuery类库的方法你可以很方便快速地定位页面中任何元素,并为其添加响应的行为。
    -------------------------------------------------
    一、什么是选择器?
      jQuery提供获取页面元素一种语法。

    二、选择器的组成?
      选择器一般由“特殊符号”+“字符串”组成。
      比如:“#”代表id “mydiv”是一个字符串,那么整体#mydiv代表,id为mydiv的元素对象。

    三、使用选择器获取元素?
      $(“选择器”) , $ (“#mydiv”)

    注意:如果通过jQuery方法获取页面中元素,没有查找到,返回值不是null,返回值为一个空数组[],所以判断是否获取到元素,通过jquery.length!=0来判断。

    过滤选择器:通过特定的过滤规则来筛选所需要的DOM元素.过滤规则与CSS中的伪类选择器语法相同.
    即选择器以一个冒号(:)开头.
    按照不同的过滤规则,可分为基本过滤,内容过滤,可见性过滤,属性过滤,子元素过滤,表单对象属性过滤选择器.

    //基础选择器
    //<li>问题一:请得到id为msg的元素的文本内容; </li>
    $(function(){
        var msg = $("#msg").text();
        console.debug(msg);
    });
    //<li>问题二:请查询所有li元素,并打印出数量;</li>
    $(function(){
        var length = $("li").length;
        console.debug(length);
        var size = $("li").size();
        console.debug(size);
    });
    //<li>问题三:得到所有class为selected的元素;</li>
    $(function(){
        console.debug($(".selected"));
    });
    //<li>问题四:查询myul下有多少个li,学会使用selector和get方法;</li>
    $(function(){
        console.debug($("#myul li"));
        console.debug($("#myul li")[0]);//DOM对象
        console.debug($("#myul li").get(0));//DOM对象
        console.debug($("#myul li").selector);//当前使用的选择器类型
    });
    //层级选择器
    //<div>问题一:选择ul下的所有li元素,并分析选择结果; </div>
    $(function(){
        console.debug($("ul li"));
    });
    //<div>问题二:选择myul下的所有直接li元素,并分析选择结果; </div>
    $(function(){
        console.debug($("#myul>li"));
    });
    //<div>问题三:选择所有label元素后的input元素,并分析选择结果; </div>
    $(function(){
        console.debug($("label~input").css("background-color","yellow"));
    });
    //<div>问题四:选择紧跟着label元素的input元素,并分析选择结果; </div>
    $(function(){
        console.debug($("label+input").css("background-color","gray"));
    });
    //基础过滤器
    //<li>问题一:请得到ul第一个li元素(:first); </li>
    $(function(){
        //$("ul li:first").css("background","yellow");
    });
    //<li>问题二:请得到每一个ul的第一个li元素(:first-child);</li>
    $(function(){
        //$("ul li:first-child").css("background","yellow");
    });
    
    //<li>问题三:得到ul最后一个li元素;</li>
    $(function(){
        //$("ul li:last").css("background-color","yellow");
    });
    //<li>问题四:得到每一个ul元素的最后一个li元素(:last-child);</li>
    $(function(){
        //$("ul li:last-child").css("background-color","yellow");
    });
    //<li>问题五:得到奇数/偶数位li元素(:odd/:even);</li>
    $(function(){
        //$("li:odd").css("background-color","yellow");
        //$("li:even").css("background-color","yellow");
    });
    //<li>问题六:得到每一个ul元素的奇数/偶数位li元素(:nth-child);</li>
    $(function(){
        //$("ul li:nth-child(3n+1)").css("background-color","yellow");
    });
    //<li>问题七:表格隔行变色;</li>
    $(function(){
        //$("#mytable tbody tr:even").css("background-color","yellow");
        //$("#mytable tbody tr:odd").css("background-color","gray");
    });
    //<li>问题八:选择所有id属性值以select_开头的checkbox([attribute^=value]);</li>
    $(function(){
        console.debug($(":checkbox[id^='select_']"));
    });
  • 相关阅读:
    【语言处理与Python】11.3数据采集
    【语言处理与Python】11.4使用XML\11.5使用Toolbox数据
    【语言处理与Python】11.1语料库结构:一个案例研究\11.2语料库生命周期
    【语言处理与Python】10.5段落语义层
    CentOS7.4 删除virbr0虚拟网卡
    套接字超时设置
    Linux命令进制转换、大小写转化
    网络编程第一卷读书笔记(随手记)
    linux下tcp选项TCP_DEFER_ACCEPT研究记录
    Cannot assign requested address出现的原因及解决方案
  • 原文地址:https://www.cnblogs.com/Java0120/p/10289569.html
Copyright © 2011-2022 走看看