MyselfNotes_jquery&json_by_sir.w

jquery选择器

  • js中的元素节点与 jQuery 元素是不是同一种元素? 如果不是为什么? 两者如何进行转换?

    例子:	<span id="etoak">xxxx</span>
    
    js:
        let nodeSp = document.getElementById('etoak')
    
        //获得的为span标签  <span id="etoak">xxxx</span>
    
    
    jquery:
        let $sp = $('#etoak')
    
        [<span id="etoak">xxxx</span>]
        // jq其实将span标签放入数组中进行存放
    
        //nodeSp 和 $sp不相等
    
    //jquery 元素是对 js 元素节点一个轻度的封装,js 元素节点与 jquery 元素 ,不能通用 方法 函数 属性,只能使用jq自己的 方法 函数 属性
    
    
    nodeSp.innerHTML = xxxxx
    $sp.html(xxxxx)
    
    
    //两者如何进行转换?
    
    js => jQuery
        $(nodeSp)
        $(document)
        $(location)
        $(history)
        $(screen)
    
    jQuery => js
        $sp[0]
        $sp.get(0)
    
  • jq选择器

    //1.通过标签名进行选择
    $('tagName')
    //2.通过类名进行选择
    $('.class')
    //3.通过id名进行选择
    $('#id')
    //4.交集选择器
    $('tagName.class')
    $('tagName#id')
    //5.并集选择器
    $('sel1,sel2,sel3.....')
    //6.后代选择器
    $('sel sel2 sel3 .....')
    //7.子类选择器
    $('sel1 > sel2')
    //8.紧邻兄弟选择器
    $('sel1 + sel2')
    //9.兄弟选择器
    $('sel1 ~ sel2')
    //10.通过属性名选择
    $('[属性名]')
    //11.通过属性名和属性值选择
    $('[属性名=属性值]')
    //12.属性值开头
    $('[属性名 ^= 属性值开头]')
    //13.属性值结尾
    $('[属性名 $= 属性值结尾]')
    //14.包含属性值
    $('[属性名 *= 包含属性值'])
    //15.全选选择器
    $('*')
    
  • js使用css渲染样式

    sel.css('样式名','样式值')
    sel.css({
        样式名:样式值,
        样式名:样式值,
        样式名:样式值,
    })
    //其中样式名需要小驼峰
    $('div.container > span').css({
        backgroundColor:'hotpink',
        color:'whitesmoke',
    })
    

jquery激发事件

  • 首先书写一个ready函数,ready()函数一般书写在 jquery 其他函数的最外侧,其作用为:

​ 1.保证页面载入无误,类似 js 中的 onload,与 onload 不同,ready 可以执行多次,而 onload 只能一次

​ 2:防止外界脚本污染

$(document).ready(function(){
    //其余js或者jq代码
})
  • 给jq元素绑定多个事件

    <body>
        <button>点我试试!</button>
        <input type="button" value="添加一行">
        <hr>
        <table border="1px" class="tb">
            <tr>
                <td>默认的一行</td>
            </tr>
        </table>
        <hr>
        <ul class="myul">
            <li>列表1</li>
            <li>列表2</li>
            <li>列表3</li>
            <li>列表4</li>
            <li>列表5</li>
        </ul>
    
        <div style="width:150px;height:150px;">测试域</div>
    </body>    
    
    //sel.on('事件1 事件2 事件N',function(){
    	//只要激发一个事件,就会执行函数
    //})
    $('button:contains(试试)').on('click mouseout',function(){
        $(this).attr('disable',true)
        //$(this):表示已经通过 jquery 选择器获取的元素列表 
        //attr(属性名,更改后的属性值)
    })
    
  • 给jq元素绑定特定事件

    $(document).dblclick(function(){
        console.log('谁双击我了???')//页面空白处双击触发事件
    })
    
    $('input[type=button]').click(function(){
        $('.tb').append('<tr><td>添加的一行</td></tr>')
    })
    
  • 鼠标滑过元素滑出元素

    <style>
        .red{
             	background-color: crimson;
            }
         .blue{
               	background-color: cornflowerblue;
              }
    </style>
    
    $('div:contains(测试域)').hover(
        function(){
        	$(this).removeClass().addClass('red')
    	},
        function(){
            $(this).removeClass().addClass('blue')
        },
    )
    
  • jq中的迭代

    //forEach循环
    $('myul li').each(function(inedx,value){
        if(index === 3){
            $(this).addClass('red')
        }
    })
    

什么是 JSON

全称 JavaScript Object Notation
是一种轻量级数据交换格式,本质上就是一种特殊格式字符串,是连接前后端的纽带

JSON 格式

  • Map格式

    {"key1":value,"key2":value,"key3":value,"key4":value}
    
    • “key”:称之为键,只能是字符串,必须使用双引号
    • value:称之为值,可以是任意类型,同时也可以还是 JSON,在后端不能是 java.util.Date
  • 数组格式

    [value1,value2,valueN]
    
    • value:称之为值,可以是任意类型,同时也可以还是 JSON,在后端不能是 java.util.Date

前端接受后端发送过来的 JSON

//假设后端发送过来一个 json 数据,以下为 json 的数据格式
{
    "name":"胡桃",
    "age":18
}

前端接受后端发送的 JSON 数据,可以通过 console.log() 或者 alert()直接进行打印,但仅仅只是打印,无法非常方便取出内部封装的数据

如果要获取内部的数据,则必须使用 JSON 提供的转换器

解析后端发送过来的数据需要使用 JSON.parse(json数据),转换格式如下

  • 对于 Map 格式,全部转换为 js 对象字面量

    • 原来的键全部转换为 js 对象字面量的属性名,去掉双引号
    • 原来的值全部转换为 js 对象字面量的属性值
  • 对于数组格式,全部转换为 js 数组,内部的数据根据类型进行转换

    //转换前 json 命名为 text
    {
        "name":"胡桃",
        "age":18
    }
    
    const obj = JSON.parse(text)
    console.log(obj)
    //打印结果如下
    {
        name:'胡桃',
        age:18,
    }
    

前端如何发送 JSON 给后端

const obj = {
    name:'甘雨',
    age:27,
}

//使用 json 提供的转换器将js 对象或者数组其转换为 json 字符串
let text = JSON.stringify(obj)
console.log(text)
//以下为打印结果
{
    "name":"甘雨",
    "age":27
}

注意事项

  • JSON.parse(JSON.stringify())如果使用在一起,则又被称之为万能转换器,肯定是深拷贝,但是对数据有一定要求,否则会改变原数据
  • 很多js 前端框架 例如 jquery mock vue 等 都会在接受后端发送的 json 的同时,自动使用 JSON.parse() 为我们转换,也就是说我们拿到的就是 js 对象或者数组了,不需要进行转换

Ajax

同步与异步

通俗理解:
	同步:当数据提交的时候,你什么都不能做,必须一直等待,提交成功会自动刷新整个页面,但是耗费资源比较少
	异步:当数据提交的时候,你可以做其余的事情,不需要一直等待,提交成功会部分刷新页面,但是耗费的资源比较多

同步

  • 用户发出请求之后,必须等待响应的返回,在响应返回之前,用户不能做出任何操作,只能傻等在那里,当响应返回,整个页面会被完全刷新
  • 我们平时见到的 连接提交 表单提交 都是向后端发送同步请求

异步

Node 技术 和 异步(Asynchrouse Javascript And Xml:简称 ajax)技术的诞生正式标志着 web2.0 革命的开始,前端技术终于可以和后端技术分庭抗礼,诞生了今天的主流开发思想,前后端分离

  • 用户发出请求,不需要等待响应的返回,可以继续自己其它的操作,当响应返回,页面不会完全刷新,仅仅部分修改
  • 异步涉及到的技术
    • JavaScript 基本语法
    • Xml 用来封装传输数据,作为前后端的纽带 桥梁,已经被 json 取代了
    • Json 用来封装传输数据,作为前后端的纽带 桥梁,目前为首选技术方式
    • html 渲染结构
    • css 渲染样式
  • 很多框架都支持异步技术,自带完善的异步模块,例如 jQuery Axios

注意

  • 异步如果在某一个场合和同步放在一起,则异步根本不执行,直接执行同步

ajax的属性名与属性值

$.ajax({
    //设置发送异步的目的地
    url:'http://db.etoak.com:9527/testUser/add',
    //设置发送格式的类型
    type:'post',
    //是否使用异步,注意默认 true, 使用如果设置为 false,更改为同步,则响应返回之前,浏览器锁死,用户不能做出任何操作,如果是异步,则代码永远不会跳出回调函数,如果是同步,则会跳出回调函数
    async:true,
    //设置要发送的数据的类型,此处书写 MIME 类型 此类型是浏览器对数据类型进行识别的一种写法 存在多种写法
    contentType:'json',
    //设置要发送的数据
    data:JSON.stringify({
        username,
        password,
        realname,
        email,
        phone,
        gender,
        role,
    })
    //设置返回的数据类型
    dataType:'json',
    //一切正常的回调函数,如果设置 dataType 为json,则 response 这个形参就是服务器端返回的数据,这里就是个对象或者数组,底层已经转换完毕了
    success(response){
        console.log(response)
        if (response.flag) {
            /* Js写法:location.href = './5-异步登录.html' */
            $(location).attr('href', './5-异步登录.html')
        }
	},
})

异步与同步之结束同步

$('.reg-form').submit(function () {
    
    if (checkUsername() && checkPassword() && checkRealname()) {
       
        $.ajax({            
            url: 'http://db.etoak.com:9527/testUser/add',            
            type: 'post',            
            async: true,            
            contentType: 'application/json',            
            data: JSON.stringify({
                username,
                password,
                realname,
                email,
                phone,
                gender,
                role,
            }),           
            dataType: 'json',            
            success(response) {
                console.log(response)
                if (response.flag) {
                    /* location.href = './5-异步登录.html' */
                    $(location).attr('href', './5-异步登录.html')
                }
            },
        })
    }

    /* 此处返回 false,则停止表单提交这个动作因为表单提交属于同步请求,我们一会要在内部要发送异步请求,同步和异步如果出现在同一个场合则,异步根本不执行,仅仅执行同步 */
    /* 目的就是将同步取消掉,让异步去执行 */
    return false
    
})

RESTFul 开发风格

其实就是根据需求,选择不同的发送请求的提交方式

  • post:用来进行新增操作,没有大小限制,可以使用 json 传递数据,也可以通过浏览器传递

  • get:用来进行查询操作,最大 2000 个字符,不能使用 json 传递数据,只能通过浏览器传递 ?key=value

  • delete:用来进行删除操作,最大 2000 个字符,不能使用 json 传递数据,只能通过浏览器传递 ?key=value

  • put:用来进行修改操作,没有大小限制,可以使用 json 传递数据,也可以通过浏览器传递

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值