前端——Ajax和jQuery

一、Ajax

Ajax即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML), 通过 JS 异步的向服务器发送请 求并接收响应数据。

同步访问:当客户端向服务器发送请求时,服务器在处理的过程中,浏览器只能等待,效率较低。

异步访问:当客户端向服务器发送请求时,服务器在处理的过程中,客户端可以做其他的操作,不需要一直等待。

创建ajax实例

let xhr = new XMLHttpRequest();

创建请求

method:请求方式,取值'GET' 或 'POST'

url:请求地址,字符串。

xhr.open(method,url);

发送请求

xhr.send()

响应请求

xhr.onload = function(){

//判断 你请求服务器的状态是否为200 200的状态码表示成功

if(xhr.status === 200){

console.log(xhr.response);

}

}

二、jQuery

1.jQuery介绍

jQuery是JavaScript的工具库,对原生JavaScript中的DOM操作、事件处理、包括数据处理和Ajax技术等进行封装,提供更完善,更便捷的方法。

2.工厂函数 - $()

"$()"函数用于获取元素节点,创建元素节点或将原生JavaScript对象转换为jquery对象,返回 jQuery 对象。jQuery 对象实际是一个类数组对象,包含了一系列jQuery 操作的方法。

原生JavaScript对象与jQuery对象的属性和方法不能混用。可以根据需要,互相转换 :

  1. 原生JavaScript转换jQuery对象

$(原生对象),返回 jQuery 对象

  1. jQuery对象转换原生JavaScript对象
  • 方法一 : 根据下标取元素,取出即为原生对象

var div = $("div")[0];

  • 方法二 : 使用jQuery的get(index)取原生对象

var div2 = $("div").get(0);

3.jQuery获取元素

jQuery通过选择器获取元素,$("选择器")

标签选择器:$("div")

ID 选择器:$("#d1")

类选择器:$(".c1")

群组选择器:$("body,p,h1")

后代选择器: $("div .c1")

子代选择器: $("div>span")

相邻兄弟选择器: $("h1+p") 匹配选择器1后的第一个兄弟元素,同时要求兄弟元素满足选择器2

通用兄弟选择器: $("h1~h2") 匹配选择器1后所有满足选择器2的兄弟元素

过滤选择器,需要结合其他选择器使用。

:first

匹配第一个元素 例:$("p:first")

:last

匹配最后一个元素 例:$("p:last")

:odd

匹配奇数下标对应的元素

:even

匹配偶数下标对应的元素

:eq(index)

匹配指定下标的元素

:lt(index)

匹配下标小于index的元素

:gt(index)

匹配下标大于index的元素

:not(选择器)

否定筛选,除()中选择器外,其他元素

示例代码:

复制代码
<script>
        // jQuery 是 JavaScript的工具库   对原生js代码中方法 进行封装  dom操作  事件处理   包含数据处理和ajax技术等进行了封装   提供了完善的更加简单的方法   
        
        // 直接 使用 $() 来获取元素  
        console.log($('box')); // 返回结果是JQuery对象  

        // JQuery对象 转为原生js对象  
        // let box =$('.box')[0];
        // console.log(box);
        // 或者
        let box =$('.box').get(0);
        console.log(box);

        // 通过.css修改文字颜色  
        $('.box').css('color','red')

    </script>

4.操作元素内容

// 设置或读取标签内容,等价于原生innerHTML,可识别标签语法

html()

// 设置或读取标签内容,等价于innerText,不能识别标签

text()

// 设置或读取表单元素的值,等价于原生value属性

val()

示例代码:

复制代码
 <script src='./jquery.js'></script>
     <script>
        // html()等价于  原生 innerHTML 可识别标签  
          $('.wrap').html('<h2>明天星期五了</h2>')

        // 插入文本 
        $('p').text('搞学习了')

        // 原生js  读取input控件里面的值 直接.value    
        // console.log(inp.value);

        //jquery版获取表单控件里面的内容 
        console.log($('input').val());

        // 点击button按钮 把我在input输入框的内容  弹出来 
        $('button').click(function(){
            console.log($('input').val());
        })
     </script>

5.操作标签属性

  1. attr("attrName","value")

设置或读取标签属性

  1. prop("attrName","value")

设置或读取标签属性

注意 :在设置或读取元素属性时,attr()和prop()基本没有区别;但是在读取或设置表单元素(按钮)的选中状态时,必须用prop()方法,attr()不会监听按钮选中状态的改变,只看标签属性checked是否书写

  1. removeAttr("attrName")

移除指定属性

示例代码:

复制代码
<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>

    <body>
        <!-- <input type="text" name='你好' id='check'> -->

        <input type="checkbox" name='你好' id='check'>

        <input type="submit" id='sub'>

        <img  alt="你图片没了" src="https://img2.baidu.com/it/u=2425084553,971201481&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500" alt="">
        <script src='./jquery.js'></script>
        <script>
            // 设置读取标签的属性  
            console.log($('#check').attr('name'));//读取这个标签的name属性

            // 给 value属性 设置了内容: 我输入了什么
            //    console.log($('#check').attr('value','我输入了什么'));

            //prop 读取或设置属性  
            //    alert($('#check').prop('value'))

            //attr 读取或设置属性  
            //    alert($('#check').attr('value'))

            $('#sub').click(function () {
                // 会监听你的点击状态
                // alert($('#check').prop('value'))//on表示选中

                // alert($('#check').attr('value'))//弹出  undefined 不会监听你按钮选中状态
            })

            // 删除属性
            $('img').removeAttr('src')
        </script>
    </body>

</html>

6.操作标签样式

  1. 针对类选择器,提供操作class属性值的方法

// 添加指定的类名

addClass("className")

// 移除指定的类型,如果参数省略,表示清空class属性值

removeClass("className")

// 如果当前元素存在指定类名,则移除;不存在则添加

toggleClass("className")

  1. 操作行内样式

// 设置行内样式

css("属性名","属性值")

// 设置一组CSS样式

css(对象)

示例代码:

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
            list-style: none;
        }
        .box{
            width: 300px;
            height: 300px;
            background-color: orange;
        }

        .wrap{
            background-color: pink;
        }

        .list{
          width: 400px;
          height: 80px;
          background-color: pink;
          margin: auto;
        }
        .list>li{
            float: left;
            width: 100px;
            height: 80px;
            background-color: gray;
            color: orange;
            text-align: center;
            line-height: 80px;
            /* 变成小手 */
            cursor: pointer;
        }
        .list>.only{
            background-color:  #096;
        }
    </style>
</head>
<body>
     <div class='text wrap'></div>

     <ul class='list'>
        <li>英雄联盟</li>
        <li>王者荣耀</li>
        <li>永劫无间</li>
        <li class='only'>原神</li>
     </ul>


     <p>我是文本标签</p>
     <script src='./jquery.js'></script>
     <script>
        // 添加指定类名  
        $('div').addClass('box')

        //删除指定类名    如果参数忽略不写 那就清空class属性值  
        // $('div').removeClass()

        // 如果当前标签有这个类名那就删掉  无则加 
        $('div').toggleClass('wrap')

        
        $('.list>li').click(function(){
            // 移除li标签里面用only类名  
            $('.list>li').removeClass('only');

            // this指向你当前点击的这个元素   
            // $(this).addClass('only');
            $(this).toggleClass('only')
        })


        // 操作元素 添加样式   $('元素').css('属性','属性值')  写多个就直接继续后面用.css方法 麻烦 
        // $('p').css('color','pink').css('font-size','20px')

        // 快捷写多个属性 就写对象属性  
        $('p').css(
            {
            'width':'200px',
            'height':'300px',
            'background-color':'green'
            }
        )
     </script>
</body>
</html>

7.元素的创建,添加,删除

1. 创建:使用$("标签语法"),返回创建好的元素

// 创建元素

let div = $("<div></div>");

// 设置内容和属性

div.html("动态创建").attr("id","d1").css("color","red");

let h1 = $("<h1 id='d1'>一级标题</h1>")

2. 作为子元素添加

// 在$obj的末尾添加子元素newObj

$obj.append(newObj);

// 作为第一个子元素添加至$obj中

$obj.prepend(newObj);

3. 作为兄弟元素添加

// 在$obj的后面添加兄弟元素

$obj.after(newObj);

// 在$obj的前面添加兄弟元素

$obj.before(newObj);

4. 移除元素

// 移除$obj

$obj.remove();

示例代码:

复制代码
<script>
        // 创建新的span标签 
        let span = $('<span></span>');

        
        // 添加到我的div标签里面   作为最后一个子元素添加  
        // $('div').append(span)

        // 作为第一个子元素进行添加 
        // $('div').prepend(span)


        // before() 作为同级元素进行插入  在前面插入 
        $('div').before(span)

        // after() 作为同级元素进行插入  在后面插入 
        $('div').after(span)

        // 设置内容  添加类名 颜色 
        span.html('我是刚刚新建的span标签').attr('class','text').css('color','green')
         
        // 删除元素
        $('div').remove()

      </script>

8.动画效果

  1. 显示和隐藏

show(speed,callback)/hide(speed,callback)

  • speed 可选。规定元素从隐藏到完全可见的速度。默认为 "0"。

  • callback 可选。show 函数执行完之后,要执行的函数

  1. 通过使用滑动下拉和上推效果,显示隐藏的被选元素( **只针对块元素** )

slideDown(speed,callback)/slideUp(speed,callback)

  1. 通过使用淡隐淡现方式显示效果,显示隐藏的被选元素

fadeOut(speed,callback)/fadeIn(speed,callback)

复制代码
<!DOCTYPE html>
<html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            .box {
                width: 300px;
                height: 300px;
                background-color: skyblue;
            }
        </style>
    </head>

    <body>

        <div class="box"></div>
        <button class='btn1'>隐藏</button>

        <button class='btn2'>上推</button>

        <button class='btn3'>若隐</button>
        <script src='./jquery.js'></script>
        <script>
            $('.btn1').click(function () {
                // // 点击隐藏按钮 box盒子就隐藏 
                // $('.box').hide(1000,function(){
                //     // 隐藏之后  按钮的文字 替换成 显示 
                //     $('.btn1').text('显示')
                // })


                // 如果字是隐藏就执行隐藏功能  否则就执行显示   
                if ($('.btn1').text() === '隐藏') {
                    $('.box').hide(1000, function () {
                        // 隐藏之后  按钮的文字 替换成 显示 
                        $('.btn1').text('显示')
                    })
                } else {
                    // 不是就执行显示功能   
                    $('.box').show(1000, function () {
                        //显示状态下把文字 替换成 隐藏
                        $('.btn1').text('隐藏')
                    })
                }
            })


            // 上推和下拉效果  

            $('.btn2').click(function () {
                //slideUp上推方法 相当于把盒子高度 变为0 了 
                // $('.box').slideUp(1000, function () {
                //     $('.btn2').text('下拉')
                // })

                // 如果字按钮文字是上推就执行上推效果  
                if ($('.btn2').text() === '上推') {
                    $('.box').slideUp(1000, function () {
                        $('.btn2').text('下拉')
                    })
                } else {

                    // slideDown下拉方法
                    $('.box').slideDown(1000, function () {
                        $('.btn2').text('上推')
                    })
                }
            })

            //若隐若现效果
            $('.btn3').click(function () {
                // 如果字按钮文字是若隐就执行若隐效果  
                if ($('.btn3').text() === '若隐') {
                    // fadeOut若隐方法
                    $('.box').fadeOut(1000, function () {
                        $('.btn3').text('若现')
                    })
                } else {
                    // fadeIn若现方法
                    $('.box').fadeIn(1000, function () {
                        $('.btn3').text('若隐')
                    })
                }
            })
        </script>
    </body>

</html>

9.数据与对象遍历

  1. $(selector).each() 方法规定为每个匹配元素规定运行的函数

$(selector).each(function(index,element){})

  • *index* - 选择器的 index 位置

  • element - 当前的元素

  1. $.each()函数是框架提供的一个工具类函数,通过它,你可以遍历对象、数组的属性值并进行处理。

$.each(Object, function(index, data){});

  • *index* - 选择器的 index 位置

  • data- 当前的数据

10.jQuery事件处理

文档加载完毕原生JavaScript 方法:window.onload

$(function(){

// 文档加载完毕后执行

})

区别:原生onload事件不能重复书写,会产生覆盖问题;jquery中对事件做了优化,可以重复书写ready方法,依次执行

$("div").on("click",function(){});

$("div").click(function(){});

相关推荐
Forrit3 分钟前
RAG处理PDF图片:步骤顺序与完整流程
前端·数据库·pdf
yaaakaaang14 分钟前
(五)前端,如此简单!---变量
前端·javascript
2501_9419820517 分钟前
企微私域:实现企业通讯工具外部群消息的自动化主动推送
java·前端·javascript
三*一20 分钟前
基于 Turf.js 实现高精度多边形修整工具(模拟 ArcGIS 修整功能)
开发语言·前端·javascript·arcgis·maobox gl·turf.js
踩着两条虫21 分钟前
VTJ.PRO 在线应用开发平台的工作台与后台管理视图
前端·人工智能·ai编程
踩着两条虫21 分钟前
VTJ.PRO 在线应用开发平台多平台运行时(Web, H5, UniApp)
前端·低代码·ai编程
ZC19959229 分钟前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js
升鲜宝供应链及收银系统源代码服务30 分钟前
生鲜配送供应链管理系统源代码之升鲜宝社区团购商城小程序(一)
java·前端·数据库·小程序·notepad++·供应链系统源代码·多门店收银系统
ghhgy53134 分钟前
Chrome、Edge浏览器显示“由贵组织管理”,删除、解决方法
前端·chrome·edge
533_36 分钟前
[svg] fill-opacity、stroke-opacity与opacity
前端